data PrimOp
   = CharGtOp
   | CharGeOp
   | CharEqOp
   | CharNeOp
   | CharLtOp
   | CharLeOp
   | OrdOp
   | Int8ToIntOp
   | IntToInt8Op
   | Int8NegOp
   | Int8AddOp
   | Int8SubOp
   | Int8MulOp
   | Int8QuotOp
   | Int8RemOp
   | Int8QuotRemOp
   | Int8SllOp
   | Int8SraOp
   | Int8SrlOp
   | Int8ToWord8Op
   | Int8EqOp
   | Int8GeOp
   | Int8GtOp
   | Int8LeOp
   | Int8LtOp
   | Int8NeOp
   | Word8ToWordOp
   | WordToWord8Op
   | Word8AddOp
   | Word8SubOp
   | Word8MulOp
   | Word8QuotOp
   | Word8RemOp
   | Word8QuotRemOp
   | Word8AndOp
   | Word8OrOp
   | Word8XorOp
   | Word8NotOp
   | Word8SllOp
   | Word8SrlOp
   | Word8ToInt8Op
   | Word8EqOp
   | Word8GeOp
   | Word8GtOp
   | Word8LeOp
   | Word8LtOp
   | Word8NeOp
   | Int16ToIntOp
   | IntToInt16Op
   | Int16NegOp
   | Int16AddOp
   | Int16SubOp
   | Int16MulOp
   | Int16QuotOp
   | Int16RemOp
   | Int16QuotRemOp
   | Int16SllOp
   | Int16SraOp
   | Int16SrlOp
   | Int16ToWord16Op
   | Int16EqOp
   | Int16GeOp
   | Int16GtOp
   | Int16LeOp
   | Int16LtOp
   | Int16NeOp
   | Word16ToWordOp
   | WordToWord16Op
   | Word16AddOp
   | Word16SubOp
   | Word16MulOp
   | Word16QuotOp
   | Word16RemOp
   | Word16QuotRemOp
   | Word16AndOp
   | Word16OrOp
   | Word16XorOp
   | Word16NotOp
   | Word16SllOp
   | Word16SrlOp
   | Word16ToInt16Op
   | Word16EqOp
   | Word16GeOp
   | Word16GtOp
   | Word16LeOp
   | Word16LtOp
   | Word16NeOp
   | Int32ToIntOp
   | IntToInt32Op
   | Int32NegOp
   | Int32AddOp
   | Int32SubOp
   | Int32MulOp
   | Int32QuotOp
   | Int32RemOp
   | Int32QuotRemOp
   | Int32SllOp
   | Int32SraOp
   | Int32SrlOp
   | Int32ToWord32Op
   | Int32EqOp
   | Int32GeOp
   | Int32GtOp
   | Int32LeOp
   | Int32LtOp
   | Int32NeOp
   | Word32ToWordOp
   | WordToWord32Op
   | Word32AddOp
   | Word32SubOp
   | Word32MulOp
   | Word32QuotOp
   | Word32RemOp
   | Word32QuotRemOp
   | Word32AndOp
   | Word32OrOp
   | Word32XorOp
   | Word32NotOp
   | Word32SllOp
   | Word32SrlOp
   | Word32ToInt32Op
   | Word32EqOp
   | Word32GeOp
   | Word32GtOp
   | Word32LeOp
   | Word32LtOp
   | Word32NeOp
   | IntAddOp
   | IntSubOp
   | IntMulOp
   | IntMul2Op
   | IntMulMayOfloOp
   | IntQuotOp
   | IntRemOp
   | IntQuotRemOp
   | IntAndOp
   | IntOrOp
   | IntXorOp
   | IntNotOp
   | IntNegOp
   | IntAddCOp
   | IntSubCOp
   | IntGtOp
   | IntGeOp
   | IntEqOp
   | IntNeOp
   | IntLtOp
   | IntLeOp
   | ChrOp
   | IntToWordOp
   | IntToFloatOp
   | IntToDoubleOp
   | WordToFloatOp
   | WordToDoubleOp
   | IntSllOp
   | IntSraOp
   | IntSrlOp
   | WordAddOp
   | WordAddCOp
   | WordSubCOp
   | WordAdd2Op
   | WordSubOp
   | WordMulOp
   | WordMul2Op
   | WordQuotOp
   | WordRemOp
   | WordQuotRemOp
   | WordQuotRem2Op
   | WordAndOp
   | WordOrOp
   | WordXorOp
   | WordNotOp
   | WordSllOp
   | WordSrlOp
   | WordToIntOp
   | WordGtOp
   | WordGeOp
   | WordEqOp
   | WordNeOp
   | WordLtOp
   | WordLeOp
   | PopCnt8Op
   | PopCnt16Op
   | PopCnt32Op
   | PopCnt64Op
   | PopCntOp
   | Pdep8Op
   | Pdep16Op
   | Pdep32Op
   | Pdep64Op
   | PdepOp
   | Pext8Op
   | Pext16Op
   | Pext32Op
   | Pext64Op
   | PextOp
   | Clz8Op
   | Clz16Op
   | Clz32Op
   | Clz64Op
   | ClzOp
   | Ctz8Op
   | Ctz16Op
   | Ctz32Op
   | Ctz64Op
   | CtzOp
   | BSwap16Op
   | BSwap32Op
   | BSwap64Op
   | BSwapOp
   | BRev8Op
   | BRev16Op
   | BRev32Op
   | BRev64Op
   | BRevOp
   | Narrow8IntOp
   | Narrow16IntOp
   | Narrow32IntOp
   | Narrow8WordOp
   | Narrow16WordOp
   | Narrow32WordOp
   | DoubleGtOp
   | DoubleGeOp
   | DoubleEqOp
   | DoubleNeOp
   | DoubleLtOp
   | DoubleLeOp
   | DoubleAddOp
   | DoubleSubOp
   | DoubleMulOp
   | DoubleDivOp
   | DoubleNegOp
   | DoubleFabsOp
   | DoubleToIntOp
   | DoubleToFloatOp
   | DoubleExpOp
   | DoubleExpM1Op
   | DoubleLogOp
   | DoubleLog1POp
   | DoubleSqrtOp
   | DoubleSinOp
   | DoubleCosOp
   | DoubleTanOp
   | DoubleAsinOp
   | DoubleAcosOp
   | DoubleAtanOp
   | DoubleSinhOp
   | DoubleCoshOp
   | DoubleTanhOp
   | DoubleAsinhOp
   | DoubleAcoshOp
   | DoubleAtanhOp
   | DoublePowerOp
   | DoubleDecode_2IntOp
   | DoubleDecode_Int64Op
   | FloatGtOp
   | FloatGeOp
   | FloatEqOp
   | FloatNeOp
   | FloatLtOp
   | FloatLeOp
   | FloatAddOp
   | FloatSubOp
   | FloatMulOp
   | FloatDivOp
   | FloatNegOp
   | FloatFabsOp
   | FloatToIntOp
   | FloatExpOp
   | FloatExpM1Op
   | FloatLogOp
   | FloatLog1POp
   | FloatSqrtOp
   | FloatSinOp
   | FloatCosOp
   | FloatTanOp
   | FloatAsinOp
   | FloatAcosOp
   | FloatAtanOp
   | FloatSinhOp
   | FloatCoshOp
   | FloatTanhOp
   | FloatAsinhOp
   | FloatAcoshOp
   | FloatAtanhOp
   | FloatPowerOp
   | FloatToDoubleOp
   | FloatDecode_IntOp
   | NewArrayOp
   | SameMutableArrayOp
   | ReadArrayOp
   | WriteArrayOp
   | SizeofArrayOp
   | SizeofMutableArrayOp
   | IndexArrayOp
   | UnsafeFreezeArrayOp
   | UnsafeThawArrayOp
   | CopyArrayOp
   | CopyMutableArrayOp
   | CloneArrayOp
   | CloneMutableArrayOp
   | FreezeArrayOp
   | ThawArrayOp
   | CasArrayOp
   | NewSmallArrayOp
   | SameSmallMutableArrayOp
   | ShrinkSmallMutableArrayOp_Char
   | ReadSmallArrayOp
   | WriteSmallArrayOp
   | SizeofSmallArrayOp
   | SizeofSmallMutableArrayOp
   | GetSizeofSmallMutableArrayOp
   | IndexSmallArrayOp
   | UnsafeFreezeSmallArrayOp
   | UnsafeThawSmallArrayOp
   | CopySmallArrayOp
   | CopySmallMutableArrayOp
   | CloneSmallArrayOp
   | CloneSmallMutableArrayOp
   | FreezeSmallArrayOp
   | ThawSmallArrayOp
   | CasSmallArrayOp
   | NewByteArrayOp_Char
   | NewPinnedByteArrayOp_Char
   | NewAlignedPinnedByteArrayOp_Char
   | MutableByteArrayIsPinnedOp
   | ByteArrayIsPinnedOp
   | ByteArrayContents_Char
   | MutableByteArrayContents_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
   | IndexByteArrayOp_Word8AsChar
   | IndexByteArrayOp_Word8AsWideChar
   | IndexByteArrayOp_Word8AsInt
   | IndexByteArrayOp_Word8AsWord
   | IndexByteArrayOp_Word8AsAddr
   | IndexByteArrayOp_Word8AsFloat
   | IndexByteArrayOp_Word8AsDouble
   | IndexByteArrayOp_Word8AsStablePtr
   | IndexByteArrayOp_Word8AsInt16
   | IndexByteArrayOp_Word8AsInt32
   | IndexByteArrayOp_Word8AsInt64
   | IndexByteArrayOp_Word8AsWord16
   | IndexByteArrayOp_Word8AsWord32
   | IndexByteArrayOp_Word8AsWord64
   | 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
   | ReadByteArrayOp_Word8AsChar
   | ReadByteArrayOp_Word8AsWideChar
   | ReadByteArrayOp_Word8AsInt
   | ReadByteArrayOp_Word8AsWord
   | ReadByteArrayOp_Word8AsAddr
   | ReadByteArrayOp_Word8AsFloat
   | ReadByteArrayOp_Word8AsDouble
   | ReadByteArrayOp_Word8AsStablePtr
   | ReadByteArrayOp_Word8AsInt16
   | ReadByteArrayOp_Word8AsInt32
   | ReadByteArrayOp_Word8AsInt64
   | ReadByteArrayOp_Word8AsWord16
   | ReadByteArrayOp_Word8AsWord32
   | ReadByteArrayOp_Word8AsWord64
   | 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
   | WriteByteArrayOp_Word8AsChar
   | WriteByteArrayOp_Word8AsWideChar
   | WriteByteArrayOp_Word8AsInt
   | WriteByteArrayOp_Word8AsWord
   | WriteByteArrayOp_Word8AsAddr
   | WriteByteArrayOp_Word8AsFloat
   | WriteByteArrayOp_Word8AsDouble
   | WriteByteArrayOp_Word8AsStablePtr
   | WriteByteArrayOp_Word8AsInt16
   | WriteByteArrayOp_Word8AsInt32
   | WriteByteArrayOp_Word8AsInt64
   | WriteByteArrayOp_Word8AsWord16
   | WriteByteArrayOp_Word8AsWord32
   | WriteByteArrayOp_Word8AsWord64
   | CompareByteArraysOp
   | 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
   | AddrToIntOp
   | IntToAddrOp
   | 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
   | InterlockedExchange_Addr
   | InterlockedExchange_Word
   | CasAddrOp_Addr
   | CasAddrOp_Word
   | FetchAddAddrOp_Word
   | FetchSubAddrOp_Word
   | FetchAndAddrOp_Word
   | FetchNandAddrOp_Word
   | FetchOrAddrOp_Word
   | FetchXorAddrOp_Word
   | AtomicReadAddrOp_Word
   | AtomicWriteAddrOp_Word
   | NewMutVarOp
   | ReadMutVarOp
   | WriteMutVarOp
   | SameMutVarOp
   | AtomicModifyMutVar2Op
   | AtomicModifyMutVar_Op
   | CasMutVarOp
   | CatchOp
   | RaiseOp
   | RaiseIOOp
   | MaskAsyncExceptionsOp
   | MaskUninterruptibleOp
   | UnmaskAsyncExceptionsOp
   | MaskStatus
   | AtomicallyOp
   | RetryOp
   | CatchRetryOp
   | CatchSTMOp
   | NewTVarOp
   | ReadTVarOp
   | ReadTVarIOOp
   | WriteTVarOp
   | SameTVarOp
   | NewMVarOp
   | TakeMVarOp
   | TryTakeMVarOp
   | PutMVarOp
   | TryPutMVarOp
   | ReadMVarOp
   | TryReadMVarOp
   | SameMVarOp
   | IsEmptyMVarOp
   | NewIOPortrOp
   | ReadIOPortOp
   | WriteIOPortOp
   | SameIOPortOp
   | DelayOp
   | WaitReadOp
   | WaitWriteOp
   | ForkOp
   | ForkOnOp
   | KillThreadOp
   | YieldOp
   | MyThreadIdOp
   | LabelThreadOp
   | IsCurrentThreadBoundOp
   | NoDuplicateOp
   | ThreadStatusOp
   | MkWeakOp
   | MkWeakNoFinalizerOp
   | AddCFinalizerToWeakOp
   | DeRefWeakOp
   | FinalizeWeakOp
   | TouchOp
   | MakeStablePtrOp
   | DeRefStablePtrOp
   | EqStablePtrOp
   | MakeStableNameOp
   | EqStableNameOp
   | StableNameToIntOp
   | CompactNewOp
   | CompactResizeOp
   | CompactContainsOp
   | CompactContainsAnyOp
   | CompactGetFirstBlockOp
   | CompactGetNextBlockOp
   | CompactAllocateBlockOp
   | CompactFixupPointersOp
   | CompactAdd
   | CompactAddWithSharing
   | CompactSize
   | ReallyUnsafePtrEqualityOp
   | ParOp
   | SparkOp
   | SeqOp
   | GetSparkOp
   | NumSparks
   | KeepAliveOp
   | DataToTagOp
   | TagToEnumOp
   | AddrToAnyOp
   | AnyToAddrOp
   | MkApUpd0_Op
   | NewBCOOp
   | UnpackClosureOp
   | ClosureSizeOp
   | GetApStackValOp
   | GetCCSOfOp
   | GetCurrentCCSOp
   | ClearCCSOp
   | WhereFromOp
   | TraceEventOp
   | TraceEventBinaryOp
   | TraceMarkerOp
   | SetThreadAllocationCounter
   | 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