-- GENERATED by C->Haskell Compiler, version 0.28.1 Switcheroo, 1 April 2016 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Hapstone/Internal/M68K.chs" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-|
Module      : Hapstone.Internal.M68K
Description : M68K architecture header ported using C2HS + some boilerplate
Copyright   : (c) Inokentiy Babushkin, 2016
License     : BSD3
Maintainer  : Inokentiy Babushkin <inokentiy.babushkin@googlemail.com>
Stability   : experimental

This module contains M68K specific datatypes and their respective Storable
instances. Most of the types are used internally and can be looked up here.
Some of them are currently unused, as the headers only define them as symbolic
constants whose type is never used explicitly, which poses a problem for a
memory-safe port to the Haskell language, this is about to get fixed in a
future version.

Apart from that, because the module is generated using C2HS, some of the
documentation is misplaced or rendered incorrectly, so if in doubt, read the
source file.
-}
module Hapstone.Internal.M68K where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Storable as C2HSImp






{-# LINE 25 "src/Hapstone/Internal/M68K.chs" #-}


import Foreign
import Foreign.C.Types

-- | M68K registers
data M68KReg = M68kRegInvalid
             | M68kRegD0
             | M68kRegD1
             | M68kRegD2
             | M68kRegD3
             | M68kRegD4
             | M68kRegD5
             | M68kRegD6
             | M68kRegD7
             | M68kRegA0
             | M68kRegA1
             | M68kRegA2
             | M68kRegA3
             | M68kRegA4
             | M68kRegA5
             | M68kRegA6
             | M68kRegA7
             | M68kRegFp0
             | M68kRegFp1
             | M68kRegFp2
             | M68kRegFp3
             | M68kRegFp4
             | M68kRegFp5
             | M68kRegFp6
             | M68kRegFp7
             | M68kRegPc
             | M68kRegSr
             | M68kRegCcr
             | M68kRegSfc
             | M68kRegDfc
             | M68kRegUsp
             | M68kRegVbr
             | M68kRegCacr
             | M68kRegCaar
             | M68kRegMsp
             | M68kRegIsp
             | M68kRegTc
             | M68kRegItt0
             | M68kRegItt1
             | M68kRegDtt0
             | M68kRegDtt1
             | M68kRegMmusr
             | M68kRegUrp
             | M68kRegSrp
             | M68kRegFpcr
             | M68kRegFpsr
             | M68kRegFpiar
             | M68kRegEnding
  deriving (Show,Eq,Bounded)
instance Enum M68KReg where
  succ M68kRegInvalid = M68kRegD0
  succ M68kRegD0 = M68kRegD1
  succ M68kRegD1 = M68kRegD2
  succ M68kRegD2 = M68kRegD3
  succ M68kRegD3 = M68kRegD4
  succ M68kRegD4 = M68kRegD5
  succ M68kRegD5 = M68kRegD6
  succ M68kRegD6 = M68kRegD7
  succ M68kRegD7 = M68kRegA0
  succ M68kRegA0 = M68kRegA1
  succ M68kRegA1 = M68kRegA2
  succ M68kRegA2 = M68kRegA3
  succ M68kRegA3 = M68kRegA4
  succ M68kRegA4 = M68kRegA5
  succ M68kRegA5 = M68kRegA6
  succ M68kRegA6 = M68kRegA7
  succ M68kRegA7 = M68kRegFp0
  succ M68kRegFp0 = M68kRegFp1
  succ M68kRegFp1 = M68kRegFp2
  succ M68kRegFp2 = M68kRegFp3
  succ M68kRegFp3 = M68kRegFp4
  succ M68kRegFp4 = M68kRegFp5
  succ M68kRegFp5 = M68kRegFp6
  succ M68kRegFp6 = M68kRegFp7
  succ M68kRegFp7 = M68kRegPc
  succ M68kRegPc = M68kRegSr
  succ M68kRegSr = M68kRegCcr
  succ M68kRegCcr = M68kRegSfc
  succ M68kRegSfc = M68kRegDfc
  succ M68kRegDfc = M68kRegUsp
  succ M68kRegUsp = M68kRegVbr
  succ M68kRegVbr = M68kRegCacr
  succ M68kRegCacr = M68kRegCaar
  succ M68kRegCaar = M68kRegMsp
  succ M68kRegMsp = M68kRegIsp
  succ M68kRegIsp = M68kRegTc
  succ M68kRegTc = M68kRegItt0
  succ M68kRegItt0 = M68kRegItt1
  succ M68kRegItt1 = M68kRegDtt0
  succ M68kRegDtt0 = M68kRegDtt1
  succ M68kRegDtt1 = M68kRegMmusr
  succ M68kRegMmusr = M68kRegUrp
  succ M68kRegUrp = M68kRegSrp
  succ M68kRegSrp = M68kRegFpcr
  succ M68kRegFpcr = M68kRegFpsr
  succ M68kRegFpsr = M68kRegFpiar
  succ M68kRegFpiar = M68kRegEnding
  succ M68kRegEnding = error "M68KReg.succ: M68kRegEnding has no successor"

  pred M68kRegD0 = M68kRegInvalid
  pred M68kRegD1 = M68kRegD0
  pred M68kRegD2 = M68kRegD1
  pred M68kRegD3 = M68kRegD2
  pred M68kRegD4 = M68kRegD3
  pred M68kRegD5 = M68kRegD4
  pred M68kRegD6 = M68kRegD5
  pred M68kRegD7 = M68kRegD6
  pred M68kRegA0 = M68kRegD7
  pred M68kRegA1 = M68kRegA0
  pred M68kRegA2 = M68kRegA1
  pred M68kRegA3 = M68kRegA2
  pred M68kRegA4 = M68kRegA3
  pred M68kRegA5 = M68kRegA4
  pred M68kRegA6 = M68kRegA5
  pred M68kRegA7 = M68kRegA6
  pred M68kRegFp0 = M68kRegA7
  pred M68kRegFp1 = M68kRegFp0
  pred M68kRegFp2 = M68kRegFp1
  pred M68kRegFp3 = M68kRegFp2
  pred M68kRegFp4 = M68kRegFp3
  pred M68kRegFp5 = M68kRegFp4
  pred M68kRegFp6 = M68kRegFp5
  pred M68kRegFp7 = M68kRegFp6
  pred M68kRegPc = M68kRegFp7
  pred M68kRegSr = M68kRegPc
  pred M68kRegCcr = M68kRegSr
  pred M68kRegSfc = M68kRegCcr
  pred M68kRegDfc = M68kRegSfc
  pred M68kRegUsp = M68kRegDfc
  pred M68kRegVbr = M68kRegUsp
  pred M68kRegCacr = M68kRegVbr
  pred M68kRegCaar = M68kRegCacr
  pred M68kRegMsp = M68kRegCaar
  pred M68kRegIsp = M68kRegMsp
  pred M68kRegTc = M68kRegIsp
  pred M68kRegItt0 = M68kRegTc
  pred M68kRegItt1 = M68kRegItt0
  pred M68kRegDtt0 = M68kRegItt1
  pred M68kRegDtt1 = M68kRegDtt0
  pred M68kRegMmusr = M68kRegDtt1
  pred M68kRegUrp = M68kRegMmusr
  pred M68kRegSrp = M68kRegUrp
  pred M68kRegFpcr = M68kRegSrp
  pred M68kRegFpsr = M68kRegFpcr
  pred M68kRegFpiar = M68kRegFpsr
  pred M68kRegEnding = M68kRegFpiar
  pred M68kRegInvalid = error "M68KReg.pred: M68kRegInvalid has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from M68kRegEnding

  fromEnum M68kRegInvalid = 0
  fromEnum M68kRegD0 = 1
  fromEnum M68kRegD1 = 2
  fromEnum M68kRegD2 = 3
  fromEnum M68kRegD3 = 4
  fromEnum M68kRegD4 = 5
  fromEnum M68kRegD5 = 6
  fromEnum M68kRegD6 = 7
  fromEnum M68kRegD7 = 8
  fromEnum M68kRegA0 = 9
  fromEnum M68kRegA1 = 10
  fromEnum M68kRegA2 = 11
  fromEnum M68kRegA3 = 12
  fromEnum M68kRegA4 = 13
  fromEnum M68kRegA5 = 14
  fromEnum M68kRegA6 = 15
  fromEnum M68kRegA7 = 16
  fromEnum M68kRegFp0 = 17
  fromEnum M68kRegFp1 = 18
  fromEnum M68kRegFp2 = 19
  fromEnum M68kRegFp3 = 20
  fromEnum M68kRegFp4 = 21
  fromEnum M68kRegFp5 = 22
  fromEnum M68kRegFp6 = 23
  fromEnum M68kRegFp7 = 24
  fromEnum M68kRegPc = 25
  fromEnum M68kRegSr = 26
  fromEnum M68kRegCcr = 27
  fromEnum M68kRegSfc = 28
  fromEnum M68kRegDfc = 29
  fromEnum M68kRegUsp = 30
  fromEnum M68kRegVbr = 31
  fromEnum M68kRegCacr = 32
  fromEnum M68kRegCaar = 33
  fromEnum M68kRegMsp = 34
  fromEnum M68kRegIsp = 35
  fromEnum M68kRegTc = 36
  fromEnum M68kRegItt0 = 37
  fromEnum M68kRegItt1 = 38
  fromEnum M68kRegDtt0 = 39
  fromEnum M68kRegDtt1 = 40
  fromEnum M68kRegMmusr = 41
  fromEnum M68kRegUrp = 42
  fromEnum M68kRegSrp = 43
  fromEnum M68kRegFpcr = 44
  fromEnum M68kRegFpsr = 45
  fromEnum M68kRegFpiar = 46
  fromEnum M68kRegEnding = 47

  toEnum 0 = M68kRegInvalid
  toEnum 1 = M68kRegD0
  toEnum 2 = M68kRegD1
  toEnum 3 = M68kRegD2
  toEnum 4 = M68kRegD3
  toEnum 5 = M68kRegD4
  toEnum 6 = M68kRegD5
  toEnum 7 = M68kRegD6
  toEnum 8 = M68kRegD7
  toEnum 9 = M68kRegA0
  toEnum 10 = M68kRegA1
  toEnum 11 = M68kRegA2
  toEnum 12 = M68kRegA3
  toEnum 13 = M68kRegA4
  toEnum 14 = M68kRegA5
  toEnum 15 = M68kRegA6
  toEnum 16 = M68kRegA7
  toEnum 17 = M68kRegFp0
  toEnum 18 = M68kRegFp1
  toEnum 19 = M68kRegFp2
  toEnum 20 = M68kRegFp3
  toEnum 21 = M68kRegFp4
  toEnum 22 = M68kRegFp5
  toEnum 23 = M68kRegFp6
  toEnum 24 = M68kRegFp7
  toEnum 25 = M68kRegPc
  toEnum 26 = M68kRegSr
  toEnum 27 = M68kRegCcr
  toEnum 28 = M68kRegSfc
  toEnum 29 = M68kRegDfc
  toEnum 30 = M68kRegUsp
  toEnum 31 = M68kRegVbr
  toEnum 32 = M68kRegCacr
  toEnum 33 = M68kRegCaar
  toEnum 34 = M68kRegMsp
  toEnum 35 = M68kRegIsp
  toEnum 36 = M68kRegTc
  toEnum 37 = M68kRegItt0
  toEnum 38 = M68kRegItt1
  toEnum 39 = M68kRegDtt0
  toEnum 40 = M68kRegDtt1
  toEnum 41 = M68kRegMmusr
  toEnum 42 = M68kRegUrp
  toEnum 43 = M68kRegSrp
  toEnum 44 = M68kRegFpcr
  toEnum 45 = M68kRegFpsr
  toEnum 46 = M68kRegFpiar
  toEnum 47 = M68kRegEnding
  toEnum unmatched = error ("M68KReg.toEnum: Cannot match " ++ show unmatched)

{-# LINE 32 "src/Hapstone/Internal/M68K.chs" #-}


-- | M68K addressing modes
data M68KAddressMode = M68kAmNone
                     | M68kAmRegDirectData
                     | M68kAmRegDirectAddr
                     | M68kAmRegiAddr
                     | M68kAmRegiAddrPostInc
                     | M68kAmRegiAddrPreDec
                     | M68kAmRegiAddrDisp
                     | M68kAmAregiIndex8BitDisp
                     | M68kAmAregiIndexBaseDisp
                     | M68kAmMemiPostIndex
                     | M68kAmMemiPreIndex
                     | M68kAmPciDisp
                     | M68kAmPciIndex8BitDisp
                     | M68kAmPciIndexBaseDisp
                     | M68kAmPcMemiPostIndex
                     | M68kAmPcMemiPreIndex
                     | M68kAmAbsoluteDataShort
                     | M68kAmAbsoluteDataLong
                     | M68kAmImmidiate
  deriving (Show,Eq,Bounded)
instance Enum M68KAddressMode where
  succ M68kAmNone = M68kAmRegDirectData
  succ M68kAmRegDirectData = M68kAmRegDirectAddr
  succ M68kAmRegDirectAddr = M68kAmRegiAddr
  succ M68kAmRegiAddr = M68kAmRegiAddrPostInc
  succ M68kAmRegiAddrPostInc = M68kAmRegiAddrPreDec
  succ M68kAmRegiAddrPreDec = M68kAmRegiAddrDisp
  succ M68kAmRegiAddrDisp = M68kAmAregiIndex8BitDisp
  succ M68kAmAregiIndex8BitDisp = M68kAmAregiIndexBaseDisp
  succ M68kAmAregiIndexBaseDisp = M68kAmMemiPostIndex
  succ M68kAmMemiPostIndex = M68kAmMemiPreIndex
  succ M68kAmMemiPreIndex = M68kAmPciDisp
  succ M68kAmPciDisp = M68kAmPciIndex8BitDisp
  succ M68kAmPciIndex8BitDisp = M68kAmPciIndexBaseDisp
  succ M68kAmPciIndexBaseDisp = M68kAmPcMemiPostIndex
  succ M68kAmPcMemiPostIndex = M68kAmPcMemiPreIndex
  succ M68kAmPcMemiPreIndex = M68kAmAbsoluteDataShort
  succ M68kAmAbsoluteDataShort = M68kAmAbsoluteDataLong
  succ M68kAmAbsoluteDataLong = M68kAmImmidiate
  succ M68kAmImmidiate = error "M68KAddressMode.succ: M68kAmImmidiate has no successor"

  pred M68kAmRegDirectData = M68kAmNone
  pred M68kAmRegDirectAddr = M68kAmRegDirectData
  pred M68kAmRegiAddr = M68kAmRegDirectAddr
  pred M68kAmRegiAddrPostInc = M68kAmRegiAddr
  pred M68kAmRegiAddrPreDec = M68kAmRegiAddrPostInc
  pred M68kAmRegiAddrDisp = M68kAmRegiAddrPreDec
  pred M68kAmAregiIndex8BitDisp = M68kAmRegiAddrDisp
  pred M68kAmAregiIndexBaseDisp = M68kAmAregiIndex8BitDisp
  pred M68kAmMemiPostIndex = M68kAmAregiIndexBaseDisp
  pred M68kAmMemiPreIndex = M68kAmMemiPostIndex
  pred M68kAmPciDisp = M68kAmMemiPreIndex
  pred M68kAmPciIndex8BitDisp = M68kAmPciDisp
  pred M68kAmPciIndexBaseDisp = M68kAmPciIndex8BitDisp
  pred M68kAmPcMemiPostIndex = M68kAmPciIndexBaseDisp
  pred M68kAmPcMemiPreIndex = M68kAmPcMemiPostIndex
  pred M68kAmAbsoluteDataShort = M68kAmPcMemiPreIndex
  pred M68kAmAbsoluteDataLong = M68kAmAbsoluteDataShort
  pred M68kAmImmidiate = M68kAmAbsoluteDataLong
  pred M68kAmNone = error "M68KAddressMode.pred: M68kAmNone has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from M68kAmImmidiate

  fromEnum M68kAmNone = 0
  fromEnum M68kAmRegDirectData = 1
  fromEnum M68kAmRegDirectAddr = 2
  fromEnum M68kAmRegiAddr = 3
  fromEnum M68kAmRegiAddrPostInc = 4
  fromEnum M68kAmRegiAddrPreDec = 5
  fromEnum M68kAmRegiAddrDisp = 6
  fromEnum M68kAmAregiIndex8BitDisp = 7
  fromEnum M68kAmAregiIndexBaseDisp = 8
  fromEnum M68kAmMemiPostIndex = 9
  fromEnum M68kAmMemiPreIndex = 10
  fromEnum M68kAmPciDisp = 11
  fromEnum M68kAmPciIndex8BitDisp = 12
  fromEnum M68kAmPciIndexBaseDisp = 13
  fromEnum M68kAmPcMemiPostIndex = 14
  fromEnum M68kAmPcMemiPreIndex = 15
  fromEnum M68kAmAbsoluteDataShort = 16
  fromEnum M68kAmAbsoluteDataLong = 17
  fromEnum M68kAmImmidiate = 18

  toEnum 0 = M68kAmNone
  toEnum 1 = M68kAmRegDirectData
  toEnum 2 = M68kAmRegDirectAddr
  toEnum 3 = M68kAmRegiAddr
  toEnum 4 = M68kAmRegiAddrPostInc
  toEnum 5 = M68kAmRegiAddrPreDec
  toEnum 6 = M68kAmRegiAddrDisp
  toEnum 7 = M68kAmAregiIndex8BitDisp
  toEnum 8 = M68kAmAregiIndexBaseDisp
  toEnum 9 = M68kAmMemiPostIndex
  toEnum 10 = M68kAmMemiPreIndex
  toEnum 11 = M68kAmPciDisp
  toEnum 12 = M68kAmPciIndex8BitDisp
  toEnum 13 = M68kAmPciIndexBaseDisp
  toEnum 14 = M68kAmPcMemiPostIndex
  toEnum 15 = M68kAmPcMemiPreIndex
  toEnum 16 = M68kAmAbsoluteDataShort
  toEnum 17 = M68kAmAbsoluteDataLong
  toEnum 18 = M68kAmImmidiate
  toEnum unmatched = error ("M68KAddressMode.toEnum: Cannot match " ++ show unmatched)

{-# LINE 36 "src/Hapstone/Internal/M68K.chs" #-}


-- | M68K operand type
data M68KOpType = M68kOpInvalid
                | M68kOpReg
                | M68kOpImm
                | M68kOpMem
                | M68kOpFpSingle
                | M68kOpFpDouble
                | M68kOpRegBits
                | M68kOpRegPair
  deriving (Show,Eq,Bounded)
instance Enum M68KOpType where
  succ M68kOpInvalid = M68kOpReg
  succ M68kOpReg = M68kOpImm
  succ M68kOpImm = M68kOpMem
  succ M68kOpMem = M68kOpFpSingle
  succ M68kOpFpSingle = M68kOpFpDouble
  succ M68kOpFpDouble = M68kOpRegBits
  succ M68kOpRegBits = M68kOpRegPair
  succ M68kOpRegPair = error "M68KOpType.succ: M68kOpRegPair has no successor"

  pred M68kOpReg = M68kOpInvalid
  pred M68kOpImm = M68kOpReg
  pred M68kOpMem = M68kOpImm
  pred M68kOpFpSingle = M68kOpMem
  pred M68kOpFpDouble = M68kOpFpSingle
  pred M68kOpRegBits = M68kOpFpDouble
  pred M68kOpRegPair = M68kOpRegBits
  pred M68kOpInvalid = error "M68KOpType.pred: M68kOpInvalid has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from M68kOpRegPair

  fromEnum M68kOpInvalid = 0
  fromEnum M68kOpReg = 1
  fromEnum M68kOpImm = 2
  fromEnum M68kOpMem = 3
  fromEnum M68kOpFpSingle = 4
  fromEnum M68kOpFpDouble = 5
  fromEnum M68kOpRegBits = 6
  fromEnum M68kOpRegPair = 7

  toEnum 0 = M68kOpInvalid
  toEnum 1 = M68kOpReg
  toEnum 2 = M68kOpImm
  toEnum 3 = M68kOpMem
  toEnum 4 = M68kOpFpSingle
  toEnum 5 = M68kOpFpDouble
  toEnum 6 = M68kOpRegBits
  toEnum 7 = M68kOpRegPair
  toEnum unmatched = error ("M68KOpType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 40 "src/Hapstone/Internal/M68K.chs" #-}


-- | memory access operands
-- associated with 'M68KOpMem' operand type
data M68KOpMemStruct = M68KOpMemStruct 
    { baseReg :: M68KReg -- ^ base register
    , indexReg :: M68KReg -- ^ index register
    , inBaseReg :: M68KReg -- ^ indirect base register
    , inDisp :: Word32 -- ^ indirect displacement
    , outDisp :: Word32 -- ^ other displacement
    , disp :: Word16 -- ^ displacement value
    , scale :: Word8 -- ^ scale for index register
    -- TODO: use ADT!
    , bitfield :: Word8 -- ^ set to true if the two values below are used
    , width :: Word8 -- ^ used for bf* instructions
    , offset :: Word8 -- ^ used for bf* instructions
    , indexSize :: Word8 -- ^ 0 = w, 1 = l
    } deriving (Show, Eq)

instance Storable M68KOpMemStruct where
    sizeOf _ = 28
{-# LINE 60 "src/Hapstone/Internal/M68K.chs" #-}

    alignment _ = 4
{-# LINE 61 "src/Hapstone/Internal/M68K.chs" #-}

    peek p = M68KOpMemStruct
        <$> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 12 :: IO C2HSImp.CUInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 16 :: IO C2HSImp.CUInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 20 :: IO C2HSImp.CUShort}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 22 :: IO C2HSImp.CUChar}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 23 :: IO C2HSImp.CUChar}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 24 :: IO C2HSImp.CUChar}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 25 :: IO C2HSImp.CUChar}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 26 :: IO C2HSImp.CUChar}) p)
    poke p (M68KOpMemStruct bR iR iBR iD oD d s b w o i) = do
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum bR)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 4 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum iR)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 8 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum iBR)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 12 (val :: C2HSImp.CUInt)}) p (fromIntegral iD)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 16 (val :: C2HSImp.CUInt)}) p (fromIntegral oD)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 20 (val :: C2HSImp.CUShort)}) p (fromIntegral d)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 22 (val :: C2HSImp.CUChar)}) p (fromIntegral s)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 23 (val :: C2HSImp.CUChar)}) p (fromIntegral b)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 24 (val :: C2HSImp.CUChar)}) p (fromIntegral w)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 25 (val :: C2HSImp.CUChar)}) p (fromIntegral o)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 26 (val :: C2HSImp.CUChar)}) p (fromIntegral i)

-- | instruction operand value
data CsM68KOpValue
    = Imm Word64 -- ^ immediate value for `M68KOpImm` operand
    | Dimm Double -- ^ immediate double precision floating point value
    | Simm Float -- ^ immediate single precision floating point value
    | Reg M68KReg -- ^ register value for `M68KOpReg` operand
    | Mem M68KOpMemStruct -- ^ memory value for `M68KOpMem` operand
    | RegBits Word32 -- ^ register bits for movem/cas2/etc (always in d0-d7,
                     -- a0-a7, fp0-fp7 order)
    | RegPair M68KReg M68KReg -- ^ register pair in the same operand
                              -- (upper 4 bits first,
                              -- lower 4 bits second register)
    | Undefined -- ^ error value for `M68KOpInvalid` operand
    deriving (Show, Eq)

data CsM68KOp = CsM68KOp
    { value :: CsM68KOpValue
    , address_mode :: M68KAddressMode
    } deriving (Show, Eq)

instance Storable CsM68KOp where
    sizeOf _ = 40
    alignment _ = 8
    peek p = CsM68KOp
        <$> do
            t <- fromIntegral <$> (peekByteOff p 28 :: IO Int32)
            let bP = castPtr p
            case toEnum t of
              M68kOpImm -> Imm <$> (peek bP :: IO Word64)
              M68kOpFpDouble -> Dimm <$> peek bP
              M68kOpFpSingle -> Simm <$> peek bP
              M68kOpReg -> (Reg . toEnum . fromIntegral) <$>
                  (peek bP :: IO Int32)
              M68kOpMem -> Mem <$> (peek bP :: IO M68KOpMemStruct)
              M68kOpRegBits -> RegBits <$> peek bP
              M68kOpRegPair -> RegPair <$>
                  ((toEnum . fromIntegral) <$>
                      (peek bP :: IO Int32)) <*>
                  ((toEnum . fromIntegral) <$>
                      (peek (plusPtr bP 4) :: IO Int32))
              _ -> return Undefined
        <*> ((toEnum . fromIntegral) <$> (peekByteOff p 32 :: IO Int32))
    poke p (CsM68KOp v a) = do
        let bP = castPtr p
            setType t = pokeByteOff p 28 (fromIntegral $ fromEnum t :: Int32)
        case v of
          Imm i -> do
              poke bP i
              setType M68kOpImm
          Dimm d -> do
              poke bP d
              setType M68kOpFpDouble
          Simm s -> do
              poke bP s
              setType M68kOpFpSingle
          Reg r -> do
              poke bP (fromIntegral $ fromEnum r :: Int32)
              setType M68kOpReg
          Mem m -> do
              poke bP m
              setType M68kOpMem
          RegBits b -> do
              poke bP b
              setType M68kOpRegBits
          RegPair r0 r1 -> do
              poke bP (fromIntegral $ fromEnum r0 :: Int32)
              poke (plusPtr bP 4) (fromIntegral $ fromEnum r1 :: Int32)
              setType M68kOpRegPair
          _ -> setType M68kOpInvalid
        pokeByteOff p 32 (fromIntegral $ fromEnum a :: Int32)

-- | operation size of a CPU instruction
data M68KCpuSize = M68kCpuSizeNone
                 | M68kCpuSizeByte
                 | M68kCpuSizeWord
                 | M68kCpuSizeLong
  deriving (Show,Eq,Bounded)
instance Enum M68KCpuSize where
  succ M68kCpuSizeNone = M68kCpuSizeByte
  succ M68kCpuSizeByte = M68kCpuSizeWord
  succ M68kCpuSizeWord = M68kCpuSizeLong
  succ M68kCpuSizeLong = error "M68KCpuSize.succ: M68kCpuSizeLong has no successor"

  pred M68kCpuSizeByte = M68kCpuSizeNone
  pred M68kCpuSizeWord = M68kCpuSizeByte
  pred M68kCpuSizeLong = M68kCpuSizeWord
  pred M68kCpuSizeNone = error "M68KCpuSize.pred: M68kCpuSizeNone has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from M68kCpuSizeLong

  fromEnum M68kCpuSizeNone = 0
  fromEnum M68kCpuSizeByte = 1
  fromEnum M68kCpuSizeWord = 2
  fromEnum M68kCpuSizeLong = 4

  toEnum 0 = M68kCpuSizeNone
  toEnum 1 = M68kCpuSizeByte
  toEnum 2 = M68kCpuSizeWord
  toEnum 4 = M68kCpuSizeLong
  toEnum unmatched = error ("M68KCpuSize.toEnum: Cannot match " ++ show unmatched)

{-# LINE 160 "src/Hapstone/Internal/M68K.chs" #-}


-- | operation size of a FPU instruction
data M68KFpuSize = M68kFpuSizeNone
                 | M68kFpuSizeSingle
                 | M68kFpuSizeDouble
                 | M68kFpuSizeExtended
  deriving (Show,Eq,Bounded)
instance Enum M68KFpuSize where
  succ M68kFpuSizeNone = M68kFpuSizeSingle
  succ M68kFpuSizeSingle = M68kFpuSizeDouble
  succ M68kFpuSizeDouble = M68kFpuSizeExtended
  succ M68kFpuSizeExtended = error "M68KFpuSize.succ: M68kFpuSizeExtended has no successor"

  pred M68kFpuSizeSingle = M68kFpuSizeNone
  pred M68kFpuSizeDouble = M68kFpuSizeSingle
  pred M68kFpuSizeExtended = M68kFpuSizeDouble
  pred M68kFpuSizeNone = error "M68KFpuSize.pred: M68kFpuSizeNone has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from M68kFpuSizeExtended

  fromEnum M68kFpuSizeNone = 0
  fromEnum M68kFpuSizeSingle = 4
  fromEnum M68kFpuSizeDouble = 8
  fromEnum M68kFpuSizeExtended = 12

  toEnum 0 = M68kFpuSizeNone
  toEnum 4 = M68kFpuSizeSingle
  toEnum 8 = M68kFpuSizeDouble
  toEnum 12 = M68kFpuSizeExtended
  toEnum unmatched = error ("M68KFpuSize.toEnum: Cannot match " ++ show unmatched)

{-# LINE 164 "src/Hapstone/Internal/M68K.chs" #-}


-- | size type of an instruction
data M68KSizeType = M68kSizeTypeInvalid
                  | M68kSizeTypeCpu
                  | M68kSizeTypeFpu
  deriving (Show,Eq,Bounded)
instance Enum M68KSizeType where
  succ M68kSizeTypeInvalid = M68kSizeTypeCpu
  succ M68kSizeTypeCpu = M68kSizeTypeFpu
  succ M68kSizeTypeFpu = error "M68KSizeType.succ: M68kSizeTypeFpu has no successor"

  pred M68kSizeTypeCpu = M68kSizeTypeInvalid
  pred M68kSizeTypeFpu = M68kSizeTypeCpu
  pred M68kSizeTypeInvalid = error "M68KSizeType.pred: M68kSizeTypeInvalid has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from M68kSizeTypeFpu

  fromEnum M68kSizeTypeInvalid = 0
  fromEnum M68kSizeTypeCpu = 1
  fromEnum M68kSizeTypeFpu = 2

  toEnum 0 = M68kSizeTypeInvalid
  toEnum 1 = M68kSizeTypeCpu
  toEnum 2 = M68kSizeTypeFpu
  toEnum unmatched = error ("M68KSizeType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 168 "src/Hapstone/Internal/M68K.chs" #-}


-- | operation size of an instruction (not it's own size)
data M68KOpSize
    = Cpu M68KCpuSize
    | Fpu M68KFpuSize
    | UnknownSize
    deriving (Show, Eq)

instance Storable M68KOpSize where
    sizeOf _ = 8
    alignment _ = 4
    peek p = do
        t <- fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p
        case toEnum t of
          M68kSizeTypeCpu -> (Cpu . toEnum . fromIntegral) <$>
              (peekByteOff p 4 :: IO Int32)
          M68kSizeTypeFpu -> (Fpu . toEnum . fromIntegral) <$>
              (peekByteOff p 4 :: IO Int32)
          M68kSizeTypeInvalid -> pure UnknownSize
    poke p (Cpu c) = do
        poke (plusPtr p 4) (fromIntegral $ fromEnum c :: Int32)
        poke (castPtr p) (fromIntegral $ fromEnum M68kSizeTypeCpu :: Int32)
    poke p (Fpu f) = do
        poke (castPtr p) (fromIntegral $ fromEnum M68kSizeTypeFpu :: Int32)
        poke (plusPtr p 4) (fromIntegral $ fromEnum f :: Int32)
    poke p UnknownSize = poke (castPtr p)
        (fromIntegral $ fromEnum M68kSizeTypeInvalid :: Int32)

-- | a M68K instruction and it's operands
data CsM68K = CsM68K
    { operands :: [CsM68KOp] -- ^ operand list for this instruction,
                             -- *MUST* have <= 8 elements, else you'll
                             -- get a runtime error when you (implicitly)
                             -- try to write it to memory via it's
                             -- Storable instance
    , op_size :: M68KOpSize
    } deriving (Show, Eq)

instance Storable CsM68K where
    sizeOf _ = 172
    alignment _ = 8
    peek p = CsM68K
        <$> do num <- fromIntegral <$> (peek (plusPtr p 168) :: IO Word8)
               peekArray num (castPtr p)
        <*> (peek (plusPtr p 160) :: IO M68KOpSize)
    poke p (CsM68K o s) = do
        poke (plusPtr p 160) s
        poke (plusPtr p 168) (fromIntegral $ length o :: Word8)
        if length o > 4
           then error "operands overflew 4 elements"
           else pokeArray (castPtr p) o

-- | M68K instructions
data M68KInsn = M68kInsInvalid
              | M68kInsAbcd
              | M68kInsAdd
              | M68kInsAdda
              | M68kInsAddi
              | M68kInsAddq
              | M68kInsAddx
              | M68kInsAnd
              | M68kInsAndi
              | M68kInsAsl
              | M68kInsAsr
              | M68kInsBhs
              | M68kInsBlo
              | M68kInsBhi
              | M68kInsBls
              | M68kInsBcc
              | M68kInsBcs
              | M68kInsBne
              | M68kInsBeq
              | M68kInsBvc
              | M68kInsBvs
              | M68kInsBpl
              | M68kInsBmi
              | M68kInsBge
              | M68kInsBlt
              | M68kInsBgt
              | M68kInsBle
              | M68kInsBra
              | M68kInsBsr
              | M68kInsBchg
              | M68kInsBclr
              | M68kInsBset
              | M68kInsBtst
              | M68kInsBfchg
              | M68kInsBfclr
              | M68kInsBfexts
              | M68kInsBfextu
              | M68kInsBfffo
              | M68kInsBfins
              | M68kInsBfset
              | M68kInsBftst
              | M68kInsBkpt
              | M68kInsCallm
              | M68kInsCas
              | M68kInsCas2
              | M68kInsChk
              | M68kInsChk2
              | M68kInsClr
              | M68kInsCmp
              | M68kInsCmpa
              | M68kInsCmpi
              | M68kInsCmpm
              | M68kInsCmp2
              | M68kInsCinvl
              | M68kInsCinvp
              | M68kInsCinva
              | M68kInsCpushl
              | M68kInsCpushp
              | M68kInsCpusha
              | M68kInsDbt
              | M68kInsDbf
              | M68kInsDbhi
              | M68kInsDbls
              | M68kInsDbcc
              | M68kInsDbcs
              | M68kInsDbne
              | M68kInsDbeq
              | M68kInsDbvc
              | M68kInsDbvs
              | M68kInsDbpl
              | M68kInsDbmi
              | M68kInsDbge
              | M68kInsDblt
              | M68kInsDbgt
              | M68kInsDble
              | M68kInsDbra
              | M68kInsDivs
              | M68kInsDivsl
              | M68kInsDivu
              | M68kInsDivul
              | M68kInsEor
              | M68kInsEori
              | M68kInsExg
              | M68kInsExt
              | M68kInsExtb
              | M68kInsFabs
              | M68kInsFsabs
              | M68kInsFdabs
              | M68kInsFacos
              | M68kInsFadd
              | M68kInsFsadd
              | M68kInsFdadd
              | M68kInsFasin
              | M68kInsFatan
              | M68kInsFatanh
              | M68kInsFbf
              | M68kInsFbeq
              | M68kInsFbogt
              | M68kInsFboge
              | M68kInsFbolt
              | M68kInsFbole
              | M68kInsFbogl
              | M68kInsFbor
              | M68kInsFbun
              | M68kInsFbueq
              | M68kInsFbugt
              | M68kInsFbuge
              | M68kInsFbult
              | M68kInsFbule
              | M68kInsFbne
              | M68kInsFbt
              | M68kInsFbsf
              | M68kInsFbseq
              | M68kInsFbgt
              | M68kInsFbge
              | M68kInsFblt
              | M68kInsFble
              | M68kInsFbgl
              | M68kInsFbgle
              | M68kInsFbngle
              | M68kInsFbngl
              | M68kInsFbnle
              | M68kInsFbnlt
              | M68kInsFbnge
              | M68kInsFbngt
              | M68kInsFbsne
              | M68kInsFbst
              | M68kInsFcmp
              | M68kInsFcos
              | M68kInsFcosh
              | M68kInsFdbf
              | M68kInsFdbeq
              | M68kInsFdbogt
              | M68kInsFdboge
              | M68kInsFdbolt
              | M68kInsFdbole
              | M68kInsFdbogl
              | M68kInsFdbor
              | M68kInsFdbun
              | M68kInsFdbueq
              | M68kInsFdbugt
              | M68kInsFdbuge
              | M68kInsFdbult
              | M68kInsFdbule
              | M68kInsFdbne
              | M68kInsFdbt
              | M68kInsFdbsf
              | M68kInsFdbseq
              | M68kInsFdbgt
              | M68kInsFdbge
              | M68kInsFdblt
              | M68kInsFdble
              | M68kInsFdbgl
              | M68kInsFdbgle
              | M68kInsFdbngle
              | M68kInsFdbngl
              | M68kInsFdbnle
              | M68kInsFdbnlt
              | M68kInsFdbnge
              | M68kInsFdbngt
              | M68kInsFdbsne
              | M68kInsFdbst
              | M68kInsFdiv
              | M68kInsFsdiv
              | M68kInsFddiv
              | M68kInsFetox
              | M68kInsFetoxm1
              | M68kInsFgetexp
              | M68kInsFgetman
              | M68kInsFint
              | M68kInsFintrz
              | M68kInsFlog10
              | M68kInsFlog2
              | M68kInsFlogn
              | M68kInsFlognp1
              | M68kInsFmod
              | M68kInsFmove
              | M68kInsFsmove
              | M68kInsFdmove
              | M68kInsFmovecr
              | M68kInsFmovem
              | M68kInsFmul
              | M68kInsFsmul
              | M68kInsFdmul
              | M68kInsFneg
              | M68kInsFsneg
              | M68kInsFdneg
              | M68kInsFnop
              | M68kInsFrem
              | M68kInsFrestore
              | M68kInsFsave
              | M68kInsFscale
              | M68kInsFsgldiv
              | M68kInsFsglmul
              | M68kInsFsin
              | M68kInsFsincos
              | M68kInsFsinh
              | M68kInsFsqrt
              | M68kInsFssqrt
              | M68kInsFdsqrt
              | M68kInsFsf
              | M68kInsFsbeq
              | M68kInsFsogt
              | M68kInsFsoge
              | M68kInsFsolt
              | M68kInsFsole
              | M68kInsFsogl
              | M68kInsFsor
              | M68kInsFsun
              | M68kInsFsueq
              | M68kInsFsugt
              | M68kInsFsuge
              | M68kInsFsult
              | M68kInsFsule
              | M68kInsFsne
              | M68kInsFst
              | M68kInsFssf
              | M68kInsFsseq
              | M68kInsFsgt
              | M68kInsFsge
              | M68kInsFslt
              | M68kInsFsle
              | M68kInsFsgl
              | M68kInsFsgle
              | M68kInsFsngle
              | M68kInsFsngl
              | M68kInsFsnle
              | M68kInsFsnlt
              | M68kInsFsnge
              | M68kInsFsngt
              | M68kInsFssne
              | M68kInsFsst
              | M68kInsFsub
              | M68kInsFssub
              | M68kInsFdsub
              | M68kInsFtan
              | M68kInsFtanh
              | M68kInsFtentox
              | M68kInsFtrapf
              | M68kInsFtrapeq
              | M68kInsFtrapogt
              | M68kInsFtrapoge
              | M68kInsFtrapolt
              | M68kInsFtrapole
              | M68kInsFtrapogl
              | M68kInsFtrapor
              | M68kInsFtrapun
              | M68kInsFtrapueq
              | M68kInsFtrapugt
              | M68kInsFtrapuge
              | M68kInsFtrapult
              | M68kInsFtrapule
              | M68kInsFtrapne
              | M68kInsFtrapt
              | M68kInsFtrapsf
              | M68kInsFtrapseq
              | M68kInsFtrapgt
              | M68kInsFtrapge
              | M68kInsFtraplt
              | M68kInsFtraple
              | M68kInsFtrapgl
              | M68kInsFtrapgle
              | M68kInsFtrapngle
              | M68kInsFtrapngl
              | M68kInsFtrapnle
              | M68kInsFtrapnlt
              | M68kInsFtrapnge
              | M68kInsFtrapngt
              | M68kInsFtrapsne
              | M68kInsFtrapst
              | M68kInsFtst
              | M68kInsFtwotox
              | M68kInsHalt
              | M68kInsIllegal
              | M68kInsJmp
              | M68kInsJsr
              | M68kInsLea
              | M68kInsLink
              | M68kInsLpstop
              | M68kInsLsl
              | M68kInsLsr
              | M68kInsMove
              | M68kInsMovea
              | M68kInsMovec
              | M68kInsMovem
              | M68kInsMovep
              | M68kInsMoveq
              | M68kInsMoves
              | M68kInsMove16
              | M68kInsMuls
              | M68kInsMulu
              | M68kInsNbcd
              | M68kInsNeg
              | M68kInsNegx
              | M68kInsNop
              | M68kInsNot
              | M68kInsOr
              | M68kInsOri
              | M68kInsPack
              | M68kInsPea
              | M68kInsPflush
              | M68kInsPflusha
              | M68kInsPflushan
              | M68kInsPflushn
              | M68kInsPloadr
              | M68kInsPloadw
              | M68kInsPlpar
              | M68kInsPlpaw
              | M68kInsPmove
              | M68kInsPmovefd
              | M68kInsPtestr
              | M68kInsPtestw
              | M68kInsPulse
              | M68kInsRems
              | M68kInsRemu
              | M68kInsReset
              | M68kInsRol
              | M68kInsRor
              | M68kInsRoxl
              | M68kInsRoxr
              | M68kInsRtd
              | M68kInsRte
              | M68kInsRtm
              | M68kInsRtr
              | M68kInsRts
              | M68kInsSbcd
              | M68kInsSt
              | M68kInsSf
              | M68kInsShi
              | M68kInsSls
              | M68kInsScc
              | M68kInsShs
              | M68kInsScs
              | M68kInsSlo
              | M68kInsSne
              | M68kInsSeq
              | M68kInsSvc
              | M68kInsSvs
              | M68kInsSpl
              | M68kInsSmi
              | M68kInsSge
              | M68kInsSlt
              | M68kInsSgt
              | M68kInsSle
              | M68kInsStop
              | M68kInsSub
              | M68kInsSuba
              | M68kInsSubi
              | M68kInsSubq
              | M68kInsSubx
              | M68kInsSwap
              | M68kInsTas
              | M68kInsTrap
              | M68kInsTrapv
              | M68kInsTrapt
              | M68kInsTrapf
              | M68kInsTraphi
              | M68kInsTrapls
              | M68kInsTrapcc
              | M68kInsTraphs
              | M68kInsTrapcs
              | M68kInsTraplo
              | M68kInsTrapne
              | M68kInsTrapeq
              | M68kInsTrapvc
              | M68kInsTrapvs
              | M68kInsTrappl
              | M68kInsTrapmi
              | M68kInsTrapge
              | M68kInsTraplt
              | M68kInsTrapgt
              | M68kInsTraple
              | M68kInsTst
              | M68kInsUnlk
              | M68kInsUnpk
              | M68kInsEnding
  deriving (Show,Eq,Bounded)
instance Enum M68KInsn where
  succ M68kInsInvalid = M68kInsAbcd
  succ M68kInsAbcd = M68kInsAdd
  succ M68kInsAdd = M68kInsAdda
  succ M68kInsAdda = M68kInsAddi
  succ M68kInsAddi = M68kInsAddq
  succ M68kInsAddq = M68kInsAddx
  succ M68kInsAddx = M68kInsAnd
  succ M68kInsAnd = M68kInsAndi
  succ M68kInsAndi = M68kInsAsl
  succ M68kInsAsl = M68kInsAsr
  succ M68kInsAsr = M68kInsBhs
  succ M68kInsBhs = M68kInsBlo
  succ M68kInsBlo = M68kInsBhi
  succ M68kInsBhi = M68kInsBls
  succ M68kInsBls = M68kInsBcc
  succ M68kInsBcc = M68kInsBcs
  succ M68kInsBcs = M68kInsBne
  succ M68kInsBne = M68kInsBeq
  succ M68kInsBeq = M68kInsBvc
  succ M68kInsBvc = M68kInsBvs
  succ M68kInsBvs = M68kInsBpl
  succ M68kInsBpl = M68kInsBmi
  succ M68kInsBmi = M68kInsBge
  succ M68kInsBge = M68kInsBlt
  succ M68kInsBlt = M68kInsBgt
  succ M68kInsBgt = M68kInsBle
  succ M68kInsBle = M68kInsBra
  succ M68kInsBra = M68kInsBsr
  succ M68kInsBsr = M68kInsBchg
  succ M68kInsBchg = M68kInsBclr
  succ M68kInsBclr = M68kInsBset
  succ M68kInsBset = M68kInsBtst
  succ M68kInsBtst = M68kInsBfchg
  succ M68kInsBfchg = M68kInsBfclr
  succ M68kInsBfclr = M68kInsBfexts
  succ M68kInsBfexts = M68kInsBfextu
  succ M68kInsBfextu = M68kInsBfffo
  succ M68kInsBfffo = M68kInsBfins
  succ M68kInsBfins = M68kInsBfset
  succ M68kInsBfset = M68kInsBftst
  succ M68kInsBftst = M68kInsBkpt
  succ M68kInsBkpt = M68kInsCallm
  succ M68kInsCallm = M68kInsCas
  succ M68kInsCas = M68kInsCas2
  succ M68kInsCas2 = M68kInsChk
  succ M68kInsChk = M68kInsChk2
  succ M68kInsChk2 = M68kInsClr
  succ M68kInsClr = M68kInsCmp
  succ M68kInsCmp = M68kInsCmpa
  succ M68kInsCmpa = M68kInsCmpi
  succ M68kInsCmpi = M68kInsCmpm
  succ M68kInsCmpm = M68kInsCmp2
  succ M68kInsCmp2 = M68kInsCinvl
  succ M68kInsCinvl = M68kInsCinvp
  succ M68kInsCinvp = M68kInsCinva
  succ M68kInsCinva = M68kInsCpushl
  succ M68kInsCpushl = M68kInsCpushp
  succ M68kInsCpushp = M68kInsCpusha
  succ M68kInsCpusha = M68kInsDbt
  succ M68kInsDbt = M68kInsDbf
  succ M68kInsDbf = M68kInsDbhi
  succ M68kInsDbhi = M68kInsDbls
  succ M68kInsDbls = M68kInsDbcc
  succ M68kInsDbcc = M68kInsDbcs
  succ M68kInsDbcs = M68kInsDbne
  succ M68kInsDbne = M68kInsDbeq
  succ M68kInsDbeq = M68kInsDbvc
  succ M68kInsDbvc = M68kInsDbvs
  succ M68kInsDbvs = M68kInsDbpl
  succ M68kInsDbpl = M68kInsDbmi
  succ M68kInsDbmi = M68kInsDbge
  succ M68kInsDbge = M68kInsDblt
  succ M68kInsDblt = M68kInsDbgt
  succ M68kInsDbgt = M68kInsDble
  succ M68kInsDble = M68kInsDbra
  succ M68kInsDbra = M68kInsDivs
  succ M68kInsDivs = M68kInsDivsl
  succ M68kInsDivsl = M68kInsDivu
  succ M68kInsDivu = M68kInsDivul
  succ M68kInsDivul = M68kInsEor
  succ M68kInsEor = M68kInsEori
  succ M68kInsEori = M68kInsExg
  succ M68kInsExg = M68kInsExt
  succ M68kInsExt = M68kInsExtb
  succ M68kInsExtb = M68kInsFabs
  succ M68kInsFabs = M68kInsFsabs
  succ M68kInsFsabs = M68kInsFdabs
  succ M68kInsFdabs = M68kInsFacos
  succ M68kInsFacos = M68kInsFadd
  succ M68kInsFadd = M68kInsFsadd
  succ M68kInsFsadd = M68kInsFdadd
  succ M68kInsFdadd = M68kInsFasin
  succ M68kInsFasin = M68kInsFatan
  succ M68kInsFatan = M68kInsFatanh
  succ M68kInsFatanh = M68kInsFbf
  succ M68kInsFbf = M68kInsFbeq
  succ M68kInsFbeq = M68kInsFbogt
  succ M68kInsFbogt = M68kInsFboge
  succ M68kInsFboge = M68kInsFbolt
  succ M68kInsFbolt = M68kInsFbole
  succ M68kInsFbole = M68kInsFbogl
  succ M68kInsFbogl = M68kInsFbor
  succ M68kInsFbor = M68kInsFbun
  succ M68kInsFbun = M68kInsFbueq
  succ M68kInsFbueq = M68kInsFbugt
  succ M68kInsFbugt = M68kInsFbuge
  succ M68kInsFbuge = M68kInsFbult
  succ M68kInsFbult = M68kInsFbule
  succ M68kInsFbule = M68kInsFbne
  succ M68kInsFbne = M68kInsFbt
  succ M68kInsFbt = M68kInsFbsf
  succ M68kInsFbsf = M68kInsFbseq
  succ M68kInsFbseq = M68kInsFbgt
  succ M68kInsFbgt = M68kInsFbge
  succ M68kInsFbge = M68kInsFblt
  succ M68kInsFblt = M68kInsFble
  succ M68kInsFble = M68kInsFbgl
  succ M68kInsFbgl = M68kInsFbgle
  succ M68kInsFbgle = M68kInsFbngle
  succ M68kInsFbngle = M68kInsFbngl
  succ M68kInsFbngl = M68kInsFbnle
  succ M68kInsFbnle = M68kInsFbnlt
  succ M68kInsFbnlt = M68kInsFbnge
  succ M68kInsFbnge = M68kInsFbngt
  succ M68kInsFbngt = M68kInsFbsne
  succ M68kInsFbsne = M68kInsFbst
  succ M68kInsFbst = M68kInsFcmp
  succ M68kInsFcmp = M68kInsFcos
  succ M68kInsFcos = M68kInsFcosh
  succ M68kInsFcosh = M68kInsFdbf
  succ M68kInsFdbf = M68kInsFdbeq
  succ M68kInsFdbeq = M68kInsFdbogt
  succ M68kInsFdbogt = M68kInsFdboge
  succ M68kInsFdboge = M68kInsFdbolt
  succ M68kInsFdbolt = M68kInsFdbole
  succ M68kInsFdbole = M68kInsFdbogl
  succ M68kInsFdbogl = M68kInsFdbor
  succ M68kInsFdbor = M68kInsFdbun
  succ M68kInsFdbun = M68kInsFdbueq
  succ M68kInsFdbueq = M68kInsFdbugt
  succ M68kInsFdbugt = M68kInsFdbuge
  succ M68kInsFdbuge = M68kInsFdbult
  succ M68kInsFdbult = M68kInsFdbule
  succ M68kInsFdbule = M68kInsFdbne
  succ M68kInsFdbne = M68kInsFdbt
  succ M68kInsFdbt = M68kInsFdbsf
  succ M68kInsFdbsf = M68kInsFdbseq
  succ M68kInsFdbseq = M68kInsFdbgt
  succ M68kInsFdbgt = M68kInsFdbge
  succ M68kInsFdbge = M68kInsFdblt
  succ M68kInsFdblt = M68kInsFdble
  succ M68kInsFdble = M68kInsFdbgl
  succ M68kInsFdbgl = M68kInsFdbgle
  succ M68kInsFdbgle = M68kInsFdbngle
  succ M68kInsFdbngle = M68kInsFdbngl
  succ M68kInsFdbngl = M68kInsFdbnle
  succ M68kInsFdbnle = M68kInsFdbnlt
  succ M68kInsFdbnlt = M68kInsFdbnge
  succ M68kInsFdbnge = M68kInsFdbngt
  succ M68kInsFdbngt = M68kInsFdbsne
  succ M68kInsFdbsne = M68kInsFdbst
  succ M68kInsFdbst = M68kInsFdiv
  succ M68kInsFdiv = M68kInsFsdiv
  succ M68kInsFsdiv = M68kInsFddiv
  succ M68kInsFddiv = M68kInsFetox
  succ M68kInsFetox = M68kInsFetoxm1
  succ M68kInsFetoxm1 = M68kInsFgetexp
  succ M68kInsFgetexp = M68kInsFgetman
  succ M68kInsFgetman = M68kInsFint
  succ M68kInsFint = M68kInsFintrz
  succ M68kInsFintrz = M68kInsFlog10
  succ M68kInsFlog10 = M68kInsFlog2
  succ M68kInsFlog2 = M68kInsFlogn
  succ M68kInsFlogn = M68kInsFlognp1
  succ M68kInsFlognp1 = M68kInsFmod
  succ M68kInsFmod = M68kInsFmove
  succ M68kInsFmove = M68kInsFsmove
  succ M68kInsFsmove = M68kInsFdmove
  succ M68kInsFdmove = M68kInsFmovecr
  succ M68kInsFmovecr = M68kInsFmovem
  succ M68kInsFmovem = M68kInsFmul
  succ M68kInsFmul = M68kInsFsmul
  succ M68kInsFsmul = M68kInsFdmul
  succ M68kInsFdmul = M68kInsFneg
  succ M68kInsFneg = M68kInsFsneg
  succ M68kInsFsneg = M68kInsFdneg
  succ M68kInsFdneg = M68kInsFnop
  succ M68kInsFnop = M68kInsFrem
  succ M68kInsFrem = M68kInsFrestore
  succ M68kInsFrestore = M68kInsFsave
  succ M68kInsFsave = M68kInsFscale
  succ M68kInsFscale = M68kInsFsgldiv
  succ M68kInsFsgldiv = M68kInsFsglmul
  succ M68kInsFsglmul = M68kInsFsin
  succ M68kInsFsin = M68kInsFsincos
  succ M68kInsFsincos = M68kInsFsinh
  succ M68kInsFsinh = M68kInsFsqrt
  succ M68kInsFsqrt = M68kInsFssqrt
  succ M68kInsFssqrt = M68kInsFdsqrt
  succ M68kInsFdsqrt = M68kInsFsf
  succ M68kInsFsf = M68kInsFsbeq
  succ M68kInsFsbeq = M68kInsFsogt
  succ M68kInsFsogt = M68kInsFsoge
  succ M68kInsFsoge = M68kInsFsolt
  succ M68kInsFsolt = M68kInsFsole
  succ M68kInsFsole = M68kInsFsogl
  succ M68kInsFsogl = M68kInsFsor
  succ M68kInsFsor = M68kInsFsun
  succ M68kInsFsun = M68kInsFsueq
  succ M68kInsFsueq = M68kInsFsugt
  succ M68kInsFsugt = M68kInsFsuge
  succ M68kInsFsuge = M68kInsFsult
  succ M68kInsFsult = M68kInsFsule
  succ M68kInsFsule = M68kInsFsne
  succ M68kInsFsne = M68kInsFst
  succ M68kInsFst = M68kInsFssf
  succ M68kInsFssf = M68kInsFsseq
  succ M68kInsFsseq = M68kInsFsgt
  succ M68kInsFsgt = M68kInsFsge
  succ M68kInsFsge = M68kInsFslt
  succ M68kInsFslt = M68kInsFsle
  succ M68kInsFsle = M68kInsFsgl
  succ M68kInsFsgl = M68kInsFsgle
  succ M68kInsFsgle = M68kInsFsngle
  succ M68kInsFsngle = M68kInsFsngl
  succ M68kInsFsngl = M68kInsFsnle
  succ M68kInsFsnle = M68kInsFsnlt
  succ M68kInsFsnlt = M68kInsFsnge
  succ M68kInsFsnge = M68kInsFsngt
  succ M68kInsFsngt = M68kInsFssne
  succ M68kInsFssne = M68kInsFsst
  succ M68kInsFsst = M68kInsFsub
  succ M68kInsFsub = M68kInsFssub
  succ M68kInsFssub = M68kInsFdsub
  succ M68kInsFdsub = M68kInsFtan
  succ M68kInsFtan = M68kInsFtanh
  succ M68kInsFtanh = M68kInsFtentox
  succ M68kInsFtentox = M68kInsFtrapf
  succ M68kInsFtrapf = M68kInsFtrapeq
  succ M68kInsFtrapeq = M68kInsFtrapogt
  succ M68kInsFtrapogt = M68kInsFtrapoge
  succ M68kInsFtrapoge = M68kInsFtrapolt
  succ M68kInsFtrapolt = M68kInsFtrapole
  succ M68kInsFtrapole = M68kInsFtrapogl
  succ M68kInsFtrapogl = M68kInsFtrapor
  succ M68kInsFtrapor = M68kInsFtrapun
  succ M68kInsFtrapun = M68kInsFtrapueq
  succ M68kInsFtrapueq = M68kInsFtrapugt
  succ M68kInsFtrapugt = M68kInsFtrapuge
  succ M68kInsFtrapuge = M68kInsFtrapult
  succ M68kInsFtrapult = M68kInsFtrapule
  succ M68kInsFtrapule = M68kInsFtrapne
  succ M68kInsFtrapne = M68kInsFtrapt
  succ M68kInsFtrapt = M68kInsFtrapsf
  succ M68kInsFtrapsf = M68kInsFtrapseq
  succ M68kInsFtrapseq = M68kInsFtrapgt
  succ M68kInsFtrapgt = M68kInsFtrapge
  succ M68kInsFtrapge = M68kInsFtraplt
  succ M68kInsFtraplt = M68kInsFtraple
  succ M68kInsFtraple = M68kInsFtrapgl
  succ M68kInsFtrapgl = M68kInsFtrapgle
  succ M68kInsFtrapgle = M68kInsFtrapngle
  succ M68kInsFtrapngle = M68kInsFtrapngl
  succ M68kInsFtrapngl = M68kInsFtrapnle
  succ M68kInsFtrapnle = M68kInsFtrapnlt
  succ M68kInsFtrapnlt = M68kInsFtrapnge
  succ M68kInsFtrapnge = M68kInsFtrapngt
  succ M68kInsFtrapngt = M68kInsFtrapsne
  succ M68kInsFtrapsne = M68kInsFtrapst
  succ M68kInsFtrapst = M68kInsFtst
  succ M68kInsFtst = M68kInsFtwotox
  succ M68kInsFtwotox = M68kInsHalt
  succ M68kInsHalt = M68kInsIllegal
  succ M68kInsIllegal = M68kInsJmp
  succ M68kInsJmp = M68kInsJsr
  succ M68kInsJsr = M68kInsLea
  succ M68kInsLea = M68kInsLink
  succ M68kInsLink = M68kInsLpstop
  succ M68kInsLpstop = M68kInsLsl
  succ M68kInsLsl = M68kInsLsr
  succ M68kInsLsr = M68kInsMove
  succ M68kInsMove = M68kInsMovea
  succ M68kInsMovea = M68kInsMovec
  succ M68kInsMovec = M68kInsMovem
  succ M68kInsMovem = M68kInsMovep
  succ M68kInsMovep = M68kInsMoveq
  succ M68kInsMoveq = M68kInsMoves
  succ M68kInsMoves = M68kInsMove16
  succ M68kInsMove16 = M68kInsMuls
  succ M68kInsMuls = M68kInsMulu
  succ M68kInsMulu = M68kInsNbcd
  succ M68kInsNbcd = M68kInsNeg
  succ M68kInsNeg = M68kInsNegx
  succ M68kInsNegx = M68kInsNop
  succ M68kInsNop = M68kInsNot
  succ M68kInsNot = M68kInsOr
  succ M68kInsOr = M68kInsOri
  succ M68kInsOri = M68kInsPack
  succ M68kInsPack = M68kInsPea
  succ M68kInsPea = M68kInsPflush
  succ M68kInsPflush = M68kInsPflusha
  succ M68kInsPflusha = M68kInsPflushan
  succ M68kInsPflushan = M68kInsPflushn
  succ M68kInsPflushn = M68kInsPloadr
  succ M68kInsPloadr = M68kInsPloadw
  succ M68kInsPloadw = M68kInsPlpar
  succ M68kInsPlpar = M68kInsPlpaw
  succ M68kInsPlpaw = M68kInsPmove
  succ M68kInsPmove = M68kInsPmovefd
  succ M68kInsPmovefd = M68kInsPtestr
  succ M68kInsPtestr = M68kInsPtestw
  succ M68kInsPtestw = M68kInsPulse
  succ M68kInsPulse = M68kInsRems
  succ M68kInsRems = M68kInsRemu
  succ M68kInsRemu = M68kInsReset
  succ M68kInsReset = M68kInsRol
  succ M68kInsRol = M68kInsRor
  succ M68kInsRor = M68kInsRoxl
  succ M68kInsRoxl = M68kInsRoxr
  succ M68kInsRoxr = M68kInsRtd
  succ M68kInsRtd = M68kInsRte
  succ M68kInsRte = M68kInsRtm
  succ M68kInsRtm = M68kInsRtr
  succ M68kInsRtr = M68kInsRts
  succ M68kInsRts = M68kInsSbcd
  succ M68kInsSbcd = M68kInsSt
  succ M68kInsSt = M68kInsSf
  succ M68kInsSf = M68kInsShi
  succ M68kInsShi = M68kInsSls
  succ M68kInsSls = M68kInsScc
  succ M68kInsScc = M68kInsShs
  succ M68kInsShs = M68kInsScs
  succ M68kInsScs = M68kInsSlo
  succ M68kInsSlo = M68kInsSne
  succ M68kInsSne = M68kInsSeq
  succ M68kInsSeq = M68kInsSvc
  succ M68kInsSvc = M68kInsSvs
  succ M68kInsSvs = M68kInsSpl
  succ M68kInsSpl = M68kInsSmi
  succ M68kInsSmi = M68kInsSge
  succ M68kInsSge = M68kInsSlt
  succ M68kInsSlt = M68kInsSgt
  succ M68kInsSgt = M68kInsSle
  succ M68kInsSle = M68kInsStop
  succ M68kInsStop = M68kInsSub
  succ M68kInsSub = M68kInsSuba
  succ M68kInsSuba = M68kInsSubi
  succ M68kInsSubi = M68kInsSubq
  succ M68kInsSubq = M68kInsSubx
  succ M68kInsSubx = M68kInsSwap
  succ M68kInsSwap = M68kInsTas
  succ M68kInsTas = M68kInsTrap
  succ M68kInsTrap = M68kInsTrapv
  succ M68kInsTrapv = M68kInsTrapt
  succ M68kInsTrapt = M68kInsTrapf
  succ M68kInsTrapf = M68kInsTraphi
  succ M68kInsTraphi = M68kInsTrapls
  succ M68kInsTrapls = M68kInsTrapcc
  succ M68kInsTrapcc = M68kInsTraphs
  succ M68kInsTraphs = M68kInsTrapcs
  succ M68kInsTrapcs = M68kInsTraplo
  succ M68kInsTraplo = M68kInsTrapne
  succ M68kInsTrapne = M68kInsTrapeq
  succ M68kInsTrapeq = M68kInsTrapvc
  succ M68kInsTrapvc = M68kInsTrapvs
  succ M68kInsTrapvs = M68kInsTrappl
  succ M68kInsTrappl = M68kInsTrapmi
  succ M68kInsTrapmi = M68kInsTrapge
  succ M68kInsTrapge = M68kInsTraplt
  succ M68kInsTraplt = M68kInsTrapgt
  succ M68kInsTrapgt = M68kInsTraple
  succ M68kInsTraple = M68kInsTst
  succ M68kInsTst = M68kInsUnlk
  succ M68kInsUnlk = M68kInsUnpk
  succ M68kInsUnpk = M68kInsEnding
  succ M68kInsEnding = error "M68KInsn.succ: M68kInsEnding has no successor"

  pred M68kInsAbcd = M68kInsInvalid
  pred M68kInsAdd = M68kInsAbcd
  pred M68kInsAdda = M68kInsAdd
  pred M68kInsAddi = M68kInsAdda
  pred M68kInsAddq = M68kInsAddi
  pred M68kInsAddx = M68kInsAddq
  pred M68kInsAnd = M68kInsAddx
  pred M68kInsAndi = M68kInsAnd
  pred M68kInsAsl = M68kInsAndi
  pred M68kInsAsr = M68kInsAsl
  pred M68kInsBhs = M68kInsAsr
  pred M68kInsBlo = M68kInsBhs
  pred M68kInsBhi = M68kInsBlo
  pred M68kInsBls = M68kInsBhi
  pred M68kInsBcc = M68kInsBls
  pred M68kInsBcs = M68kInsBcc
  pred M68kInsBne = M68kInsBcs
  pred M68kInsBeq = M68kInsBne
  pred M68kInsBvc = M68kInsBeq
  pred M68kInsBvs = M68kInsBvc
  pred M68kInsBpl = M68kInsBvs
  pred M68kInsBmi = M68kInsBpl
  pred M68kInsBge = M68kInsBmi
  pred M68kInsBlt = M68kInsBge
  pred M68kInsBgt = M68kInsBlt
  pred M68kInsBle = M68kInsBgt
  pred M68kInsBra = M68kInsBle
  pred M68kInsBsr = M68kInsBra
  pred M68kInsBchg = M68kInsBsr
  pred M68kInsBclr = M68kInsBchg
  pred M68kInsBset = M68kInsBclr
  pred M68kInsBtst = M68kInsBset
  pred M68kInsBfchg = M68kInsBtst
  pred M68kInsBfclr = M68kInsBfchg
  pred M68kInsBfexts = M68kInsBfclr
  pred M68kInsBfextu = M68kInsBfexts
  pred M68kInsBfffo = M68kInsBfextu
  pred M68kInsBfins = M68kInsBfffo
  pred M68kInsBfset = M68kInsBfins
  pred M68kInsBftst = M68kInsBfset
  pred M68kInsBkpt = M68kInsBftst
  pred M68kInsCallm = M68kInsBkpt
  pred M68kInsCas = M68kInsCallm
  pred M68kInsCas2 = M68kInsCas
  pred M68kInsChk = M68kInsCas2
  pred M68kInsChk2 = M68kInsChk
  pred M68kInsClr = M68kInsChk2
  pred M68kInsCmp = M68kInsClr
  pred M68kInsCmpa = M68kInsCmp
  pred M68kInsCmpi = M68kInsCmpa
  pred M68kInsCmpm = M68kInsCmpi
  pred M68kInsCmp2 = M68kInsCmpm
  pred M68kInsCinvl = M68kInsCmp2
  pred M68kInsCinvp = M68kInsCinvl
  pred M68kInsCinva = M68kInsCinvp
  pred M68kInsCpushl = M68kInsCinva
  pred M68kInsCpushp = M68kInsCpushl
  pred M68kInsCpusha = M68kInsCpushp
  pred M68kInsDbt = M68kInsCpusha
  pred M68kInsDbf = M68kInsDbt
  pred M68kInsDbhi = M68kInsDbf
  pred M68kInsDbls = M68kInsDbhi
  pred M68kInsDbcc = M68kInsDbls
  pred M68kInsDbcs = M68kInsDbcc
  pred M68kInsDbne = M68kInsDbcs
  pred M68kInsDbeq = M68kInsDbne
  pred M68kInsDbvc = M68kInsDbeq
  pred M68kInsDbvs = M68kInsDbvc
  pred M68kInsDbpl = M68kInsDbvs
  pred M68kInsDbmi = M68kInsDbpl
  pred M68kInsDbge = M68kInsDbmi
  pred M68kInsDblt = M68kInsDbge
  pred M68kInsDbgt = M68kInsDblt
  pred M68kInsDble = M68kInsDbgt
  pred M68kInsDbra = M68kInsDble
  pred M68kInsDivs = M68kInsDbra
  pred M68kInsDivsl = M68kInsDivs
  pred M68kInsDivu = M68kInsDivsl
  pred M68kInsDivul = M68kInsDivu
  pred M68kInsEor = M68kInsDivul
  pred M68kInsEori = M68kInsEor
  pred M68kInsExg = M68kInsEori
  pred M68kInsExt = M68kInsExg
  pred M68kInsExtb = M68kInsExt
  pred M68kInsFabs = M68kInsExtb
  pred M68kInsFsabs = M68kInsFabs
  pred M68kInsFdabs = M68kInsFsabs
  pred M68kInsFacos = M68kInsFdabs
  pred M68kInsFadd = M68kInsFacos
  pred M68kInsFsadd = M68kInsFadd
  pred M68kInsFdadd = M68kInsFsadd
  pred M68kInsFasin = M68kInsFdadd
  pred M68kInsFatan = M68kInsFasin
  pred M68kInsFatanh = M68kInsFatan
  pred M68kInsFbf = M68kInsFatanh
  pred M68kInsFbeq = M68kInsFbf
  pred M68kInsFbogt = M68kInsFbeq
  pred M68kInsFboge = M68kInsFbogt
  pred M68kInsFbolt = M68kInsFboge
  pred M68kInsFbole = M68kInsFbolt
  pred M68kInsFbogl = M68kInsFbole
  pred M68kInsFbor = M68kInsFbogl
  pred M68kInsFbun = M68kInsFbor
  pred M68kInsFbueq = M68kInsFbun
  pred M68kInsFbugt = M68kInsFbueq
  pred M68kInsFbuge = M68kInsFbugt
  pred M68kInsFbult = M68kInsFbuge
  pred M68kInsFbule = M68kInsFbult
  pred M68kInsFbne = M68kInsFbule
  pred M68kInsFbt = M68kInsFbne
  pred M68kInsFbsf = M68kInsFbt
  pred M68kInsFbseq = M68kInsFbsf
  pred M68kInsFbgt = M68kInsFbseq
  pred M68kInsFbge = M68kInsFbgt
  pred M68kInsFblt = M68kInsFbge
  pred M68kInsFble = M68kInsFblt
  pred M68kInsFbgl = M68kInsFble
  pred M68kInsFbgle = M68kInsFbgl
  pred M68kInsFbngle = M68kInsFbgle
  pred M68kInsFbngl = M68kInsFbngle
  pred M68kInsFbnle = M68kInsFbngl
  pred M68kInsFbnlt = M68kInsFbnle
  pred M68kInsFbnge = M68kInsFbnlt
  pred M68kInsFbngt = M68kInsFbnge
  pred M68kInsFbsne = M68kInsFbngt
  pred M68kInsFbst = M68kInsFbsne
  pred M68kInsFcmp = M68kInsFbst
  pred M68kInsFcos = M68kInsFcmp
  pred M68kInsFcosh = M68kInsFcos
  pred M68kInsFdbf = M68kInsFcosh
  pred M68kInsFdbeq = M68kInsFdbf
  pred M68kInsFdbogt = M68kInsFdbeq
  pred M68kInsFdboge = M68kInsFdbogt
  pred M68kInsFdbolt = M68kInsFdboge
  pred M68kInsFdbole = M68kInsFdbolt
  pred M68kInsFdbogl = M68kInsFdbole
  pred M68kInsFdbor = M68kInsFdbogl
  pred M68kInsFdbun = M68kInsFdbor
  pred M68kInsFdbueq = M68kInsFdbun
  pred M68kInsFdbugt = M68kInsFdbueq
  pred M68kInsFdbuge = M68kInsFdbugt
  pred M68kInsFdbult = M68kInsFdbuge
  pred M68kInsFdbule = M68kInsFdbult
  pred M68kInsFdbne = M68kInsFdbule
  pred M68kInsFdbt = M68kInsFdbne
  pred M68kInsFdbsf = M68kInsFdbt
  pred M68kInsFdbseq = M68kInsFdbsf
  pred M68kInsFdbgt = M68kInsFdbseq
  pred M68kInsFdbge = M68kInsFdbgt
  pred M68kInsFdblt = M68kInsFdbge
  pred M68kInsFdble = M68kInsFdblt
  pred M68kInsFdbgl = M68kInsFdble
  pred M68kInsFdbgle = M68kInsFdbgl
  pred M68kInsFdbngle = M68kInsFdbgle
  pred M68kInsFdbngl = M68kInsFdbngle
  pred M68kInsFdbnle = M68kInsFdbngl
  pred M68kInsFdbnlt = M68kInsFdbnle
  pred M68kInsFdbnge = M68kInsFdbnlt
  pred M68kInsFdbngt = M68kInsFdbnge
  pred M68kInsFdbsne = M68kInsFdbngt
  pred M68kInsFdbst = M68kInsFdbsne
  pred M68kInsFdiv = M68kInsFdbst
  pred M68kInsFsdiv = M68kInsFdiv
  pred M68kInsFddiv = M68kInsFsdiv
  pred M68kInsFetox = M68kInsFddiv
  pred M68kInsFetoxm1 = M68kInsFetox
  pred M68kInsFgetexp = M68kInsFetoxm1
  pred M68kInsFgetman = M68kInsFgetexp
  pred M68kInsFint = M68kInsFgetman
  pred M68kInsFintrz = M68kInsFint
  pred M68kInsFlog10 = M68kInsFintrz
  pred M68kInsFlog2 = M68kInsFlog10
  pred M68kInsFlogn = M68kInsFlog2
  pred M68kInsFlognp1 = M68kInsFlogn
  pred M68kInsFmod = M68kInsFlognp1
  pred M68kInsFmove = M68kInsFmod
  pred M68kInsFsmove = M68kInsFmove
  pred M68kInsFdmove = M68kInsFsmove
  pred M68kInsFmovecr = M68kInsFdmove
  pred M68kInsFmovem = M68kInsFmovecr
  pred M68kInsFmul = M68kInsFmovem
  pred M68kInsFsmul = M68kInsFmul
  pred M68kInsFdmul = M68kInsFsmul
  pred M68kInsFneg = M68kInsFdmul
  pred M68kInsFsneg = M68kInsFneg
  pred M68kInsFdneg = M68kInsFsneg
  pred M68kInsFnop = M68kInsFdneg
  pred M68kInsFrem = M68kInsFnop
  pred M68kInsFrestore = M68kInsFrem
  pred M68kInsFsave = M68kInsFrestore
  pred M68kInsFscale = M68kInsFsave
  pred M68kInsFsgldiv = M68kInsFscale
  pred M68kInsFsglmul = M68kInsFsgldiv
  pred M68kInsFsin = M68kInsFsglmul
  pred M68kInsFsincos = M68kInsFsin
  pred M68kInsFsinh = M68kInsFsincos
  pred M68kInsFsqrt = M68kInsFsinh
  pred M68kInsFssqrt = M68kInsFsqrt
  pred M68kInsFdsqrt = M68kInsFssqrt
  pred M68kInsFsf = M68kInsFdsqrt
  pred M68kInsFsbeq = M68kInsFsf
  pred M68kInsFsogt = M68kInsFsbeq
  pred M68kInsFsoge = M68kInsFsogt
  pred M68kInsFsolt = M68kInsFsoge
  pred M68kInsFsole = M68kInsFsolt
  pred M68kInsFsogl = M68kInsFsole
  pred M68kInsFsor = M68kInsFsogl
  pred M68kInsFsun = M68kInsFsor
  pred M68kInsFsueq = M68kInsFsun
  pred M68kInsFsugt = M68kInsFsueq
  pred M68kInsFsuge = M68kInsFsugt
  pred M68kInsFsult = M68kInsFsuge
  pred M68kInsFsule = M68kInsFsult
  pred M68kInsFsne = M68kInsFsule
  pred M68kInsFst = M68kInsFsne
  pred M68kInsFssf = M68kInsFst
  pred M68kInsFsseq = M68kInsFssf
  pred M68kInsFsgt = M68kInsFsseq
  pred M68kInsFsge = M68kInsFsgt
  pred M68kInsFslt = M68kInsFsge
  pred M68kInsFsle = M68kInsFslt
  pred M68kInsFsgl = M68kInsFsle
  pred M68kInsFsgle = M68kInsFsgl
  pred M68kInsFsngle = M68kInsFsgle
  pred M68kInsFsngl = M68kInsFsngle
  pred M68kInsFsnle = M68kInsFsngl
  pred M68kInsFsnlt = M68kInsFsnle
  pred M68kInsFsnge = M68kInsFsnlt
  pred M68kInsFsngt = M68kInsFsnge
  pred M68kInsFssne = M68kInsFsngt
  pred M68kInsFsst = M68kInsFssne
  pred M68kInsFsub = M68kInsFsst
  pred M68kInsFssub = M68kInsFsub
  pred M68kInsFdsub = M68kInsFssub
  pred M68kInsFtan = M68kInsFdsub
  pred M68kInsFtanh = M68kInsFtan
  pred M68kInsFtentox = M68kInsFtanh
  pred M68kInsFtrapf = M68kInsFtentox
  pred M68kInsFtrapeq = M68kInsFtrapf
  pred M68kInsFtrapogt = M68kInsFtrapeq
  pred M68kInsFtrapoge = M68kInsFtrapogt
  pred M68kInsFtrapolt = M68kInsFtrapoge
  pred M68kInsFtrapole = M68kInsFtrapolt
  pred M68kInsFtrapogl = M68kInsFtrapole
  pred M68kInsFtrapor = M68kInsFtrapogl
  pred M68kInsFtrapun = M68kInsFtrapor
  pred M68kInsFtrapueq = M68kInsFtrapun
  pred M68kInsFtrapugt = M68kInsFtrapueq
  pred M68kInsFtrapuge = M68kInsFtrapugt
  pred M68kInsFtrapult = M68kInsFtrapuge
  pred M68kInsFtrapule = M68kInsFtrapult
  pred M68kInsFtrapne = M68kInsFtrapule
  pred M68kInsFtrapt = M68kInsFtrapne
  pred M68kInsFtrapsf = M68kInsFtrapt
  pred M68kInsFtrapseq = M68kInsFtrapsf
  pred M68kInsFtrapgt = M68kInsFtrapseq
  pred M68kInsFtrapge = M68kInsFtrapgt
  pred M68kInsFtraplt = M68kInsFtrapge
  pred M68kInsFtraple = M68kInsFtraplt
  pred M68kInsFtrapgl = M68kInsFtraple
  pred M68kInsFtrapgle = M68kInsFtrapgl
  pred M68kInsFtrapngle = M68kInsFtrapgle
  pred M68kInsFtrapngl = M68kInsFtrapngle
  pred M68kInsFtrapnle = M68kInsFtrapngl
  pred M68kInsFtrapnlt = M68kInsFtrapnle
  pred M68kInsFtrapnge = M68kInsFtrapnlt
  pred M68kInsFtrapngt = M68kInsFtrapnge
  pred M68kInsFtrapsne = M68kInsFtrapngt
  pred M68kInsFtrapst = M68kInsFtrapsne
  pred M68kInsFtst = M68kInsFtrapst
  pred M68kInsFtwotox = M68kInsFtst
  pred M68kInsHalt = M68kInsFtwotox
  pred M68kInsIllegal = M68kInsHalt
  pred M68kInsJmp = M68kInsIllegal
  pred M68kInsJsr = M68kInsJmp
  pred M68kInsLea = M68kInsJsr
  pred M68kInsLink = M68kInsLea
  pred M68kInsLpstop = M68kInsLink
  pred M68kInsLsl = M68kInsLpstop
  pred M68kInsLsr = M68kInsLsl
  pred M68kInsMove = M68kInsLsr
  pred M68kInsMovea = M68kInsMove
  pred M68kInsMovec = M68kInsMovea
  pred M68kInsMovem = M68kInsMovec
  pred M68kInsMovep = M68kInsMovem
  pred M68kInsMoveq = M68kInsMovep
  pred M68kInsMoves = M68kInsMoveq
  pred M68kInsMove16 = M68kInsMoves
  pred M68kInsMuls = M68kInsMove16
  pred M68kInsMulu = M68kInsMuls
  pred M68kInsNbcd = M68kInsMulu
  pred M68kInsNeg = M68kInsNbcd
  pred M68kInsNegx = M68kInsNeg
  pred M68kInsNop = M68kInsNegx
  pred M68kInsNot = M68kInsNop
  pred M68kInsOr = M68kInsNot
  pred M68kInsOri = M68kInsOr
  pred M68kInsPack = M68kInsOri
  pred M68kInsPea = M68kInsPack
  pred M68kInsPflush = M68kInsPea
  pred M68kInsPflusha = M68kInsPflush
  pred M68kInsPflushan = M68kInsPflusha
  pred M68kInsPflushn = M68kInsPflushan
  pred M68kInsPloadr = M68kInsPflushn
  pred M68kInsPloadw = M68kInsPloadr
  pred M68kInsPlpar = M68kInsPloadw
  pred M68kInsPlpaw = M68kInsPlpar
  pred M68kInsPmove = M68kInsPlpaw
  pred M68kInsPmovefd = M68kInsPmove
  pred M68kInsPtestr = M68kInsPmovefd
  pred M68kInsPtestw = M68kInsPtestr
  pred M68kInsPulse = M68kInsPtestw
  pred M68kInsRems = M68kInsPulse
  pred M68kInsRemu = M68kInsRems
  pred M68kInsReset = M68kInsRemu
  pred M68kInsRol = M68kInsReset
  pred M68kInsRor = M68kInsRol
  pred M68kInsRoxl = M68kInsRor
  pred M68kInsRoxr = M68kInsRoxl
  pred M68kInsRtd = M68kInsRoxr
  pred M68kInsRte = M68kInsRtd
  pred M68kInsRtm = M68kInsRte
  pred M68kInsRtr = M68kInsRtm
  pred M68kInsRts = M68kInsRtr
  pred M68kInsSbcd = M68kInsRts
  pred M68kInsSt = M68kInsSbcd
  pred M68kInsSf = M68kInsSt
  pred M68kInsShi = M68kInsSf
  pred M68kInsSls = M68kInsShi
  pred M68kInsScc = M68kInsSls
  pred M68kInsShs = M68kInsScc
  pred M68kInsScs = M68kInsShs
  pred M68kInsSlo = M68kInsScs
  pred M68kInsSne = M68kInsSlo
  pred M68kInsSeq = M68kInsSne
  pred M68kInsSvc = M68kInsSeq
  pred M68kInsSvs = M68kInsSvc
  pred M68kInsSpl = M68kInsSvs
  pred M68kInsSmi = M68kInsSpl
  pred M68kInsSge = M68kInsSmi
  pred M68kInsSlt = M68kInsSge
  pred M68kInsSgt = M68kInsSlt
  pred M68kInsSle = M68kInsSgt
  pred M68kInsStop = M68kInsSle
  pred M68kInsSub = M68kInsStop
  pred M68kInsSuba = M68kInsSub
  pred M68kInsSubi = M68kInsSuba
  pred M68kInsSubq = M68kInsSubi
  pred M68kInsSubx = M68kInsSubq
  pred M68kInsSwap = M68kInsSubx
  pred M68kInsTas = M68kInsSwap
  pred M68kInsTrap = M68kInsTas
  pred M68kInsTrapv = M68kInsTrap
  pred M68kInsTrapt = M68kInsTrapv
  pred M68kInsTrapf = M68kInsTrapt
  pred M68kInsTraphi = M68kInsTrapf
  pred M68kInsTrapls = M68kInsTraphi
  pred M68kInsTrapcc = M68kInsTrapls
  pred M68kInsTraphs = M68kInsTrapcc
  pred M68kInsTrapcs = M68kInsTraphs
  pred M68kInsTraplo = M68kInsTrapcs
  pred M68kInsTrapne = M68kInsTraplo
  pred M68kInsTrapeq = M68kInsTrapne
  pred M68kInsTrapvc = M68kInsTrapeq
  pred M68kInsTrapvs = M68kInsTrapvc
  pred M68kInsTrappl = M68kInsTrapvs
  pred M68kInsTrapmi = M68kInsTrappl
  pred M68kInsTrapge = M68kInsTrapmi
  pred M68kInsTraplt = M68kInsTrapge
  pred M68kInsTrapgt = M68kInsTraplt
  pred M68kInsTraple = M68kInsTrapgt
  pred M68kInsTst = M68kInsTraple
  pred M68kInsUnlk = M68kInsTst
  pred M68kInsUnpk = M68kInsUnlk
  pred M68kInsEnding = M68kInsUnpk
  pred M68kInsInvalid = error "M68KInsn.pred: M68kInsInvalid has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from M68kInsEnding

  fromEnum M68kInsInvalid = 0
  fromEnum M68kInsAbcd = 1
  fromEnum M68kInsAdd = 2
  fromEnum M68kInsAdda = 3
  fromEnum M68kInsAddi = 4
  fromEnum M68kInsAddq = 5
  fromEnum M68kInsAddx = 6
  fromEnum M68kInsAnd = 7
  fromEnum M68kInsAndi = 8
  fromEnum M68kInsAsl = 9
  fromEnum M68kInsAsr = 10
  fromEnum M68kInsBhs = 11
  fromEnum M68kInsBlo = 12
  fromEnum M68kInsBhi = 13
  fromEnum M68kInsBls = 14
  fromEnum M68kInsBcc = 15
  fromEnum M68kInsBcs = 16
  fromEnum M68kInsBne = 17
  fromEnum M68kInsBeq = 18
  fromEnum M68kInsBvc = 19
  fromEnum M68kInsBvs = 20
  fromEnum M68kInsBpl = 21
  fromEnum M68kInsBmi = 22
  fromEnum M68kInsBge = 23
  fromEnum M68kInsBlt = 24
  fromEnum M68kInsBgt = 25
  fromEnum M68kInsBle = 26
  fromEnum M68kInsBra = 27
  fromEnum M68kInsBsr = 28
  fromEnum M68kInsBchg = 29
  fromEnum M68kInsBclr = 30
  fromEnum M68kInsBset = 31
  fromEnum M68kInsBtst = 32
  fromEnum M68kInsBfchg = 33
  fromEnum M68kInsBfclr = 34
  fromEnum M68kInsBfexts = 35
  fromEnum M68kInsBfextu = 36
  fromEnum M68kInsBfffo = 37
  fromEnum M68kInsBfins = 38
  fromEnum M68kInsBfset = 39
  fromEnum M68kInsBftst = 40
  fromEnum M68kInsBkpt = 41
  fromEnum M68kInsCallm = 42
  fromEnum M68kInsCas = 43
  fromEnum M68kInsCas2 = 44
  fromEnum M68kInsChk = 45
  fromEnum M68kInsChk2 = 46
  fromEnum M68kInsClr = 47
  fromEnum M68kInsCmp = 48
  fromEnum M68kInsCmpa = 49
  fromEnum M68kInsCmpi = 50
  fromEnum M68kInsCmpm = 51
  fromEnum M68kInsCmp2 = 52
  fromEnum M68kInsCinvl = 53
  fromEnum M68kInsCinvp = 54
  fromEnum M68kInsCinva = 55
  fromEnum M68kInsCpushl = 56
  fromEnum M68kInsCpushp = 57
  fromEnum M68kInsCpusha = 58
  fromEnum M68kInsDbt = 59
  fromEnum M68kInsDbf = 60
  fromEnum M68kInsDbhi = 61
  fromEnum M68kInsDbls = 62
  fromEnum M68kInsDbcc = 63
  fromEnum M68kInsDbcs = 64
  fromEnum M68kInsDbne = 65
  fromEnum M68kInsDbeq = 66
  fromEnum M68kInsDbvc = 67
  fromEnum M68kInsDbvs = 68
  fromEnum M68kInsDbpl = 69
  fromEnum M68kInsDbmi = 70
  fromEnum M68kInsDbge = 71
  fromEnum M68kInsDblt = 72
  fromEnum M68kInsDbgt = 73
  fromEnum M68kInsDble = 74
  fromEnum M68kInsDbra = 75
  fromEnum M68kInsDivs = 76
  fromEnum M68kInsDivsl = 77
  fromEnum M68kInsDivu = 78
  fromEnum M68kInsDivul = 79
  fromEnum M68kInsEor = 80
  fromEnum M68kInsEori = 81
  fromEnum M68kInsExg = 82
  fromEnum M68kInsExt = 83
  fromEnum M68kInsExtb = 84
  fromEnum M68kInsFabs = 85
  fromEnum M68kInsFsabs = 86
  fromEnum M68kInsFdabs = 87
  fromEnum M68kInsFacos = 88
  fromEnum M68kInsFadd = 89
  fromEnum M68kInsFsadd = 90
  fromEnum M68kInsFdadd = 91
  fromEnum M68kInsFasin = 92
  fromEnum M68kInsFatan = 93
  fromEnum M68kInsFatanh = 94
  fromEnum M68kInsFbf = 95
  fromEnum M68kInsFbeq = 96
  fromEnum M68kInsFbogt = 97
  fromEnum M68kInsFboge = 98
  fromEnum M68kInsFbolt = 99
  fromEnum M68kInsFbole = 100
  fromEnum M68kInsFbogl = 101
  fromEnum M68kInsFbor = 102
  fromEnum M68kInsFbun = 103
  fromEnum M68kInsFbueq = 104
  fromEnum M68kInsFbugt = 105
  fromEnum M68kInsFbuge = 106
  fromEnum M68kInsFbult = 107
  fromEnum M68kInsFbule = 108
  fromEnum M68kInsFbne = 109
  fromEnum M68kInsFbt = 110
  fromEnum M68kInsFbsf = 111
  fromEnum M68kInsFbseq = 112
  fromEnum M68kInsFbgt = 113
  fromEnum M68kInsFbge = 114
  fromEnum M68kInsFblt = 115
  fromEnum M68kInsFble = 116
  fromEnum M68kInsFbgl = 117
  fromEnum M68kInsFbgle = 118
  fromEnum M68kInsFbngle = 119
  fromEnum M68kInsFbngl = 120
  fromEnum M68kInsFbnle = 121
  fromEnum M68kInsFbnlt = 122
  fromEnum M68kInsFbnge = 123
  fromEnum M68kInsFbngt = 124
  fromEnum M68kInsFbsne = 125
  fromEnum M68kInsFbst = 126
  fromEnum M68kInsFcmp = 127
  fromEnum M68kInsFcos = 128
  fromEnum M68kInsFcosh = 129
  fromEnum M68kInsFdbf = 130
  fromEnum M68kInsFdbeq = 131
  fromEnum M68kInsFdbogt = 132
  fromEnum M68kInsFdboge = 133
  fromEnum M68kInsFdbolt = 134
  fromEnum M68kInsFdbole = 135
  fromEnum M68kInsFdbogl = 136
  fromEnum M68kInsFdbor = 137
  fromEnum M68kInsFdbun = 138
  fromEnum M68kInsFdbueq = 139
  fromEnum M68kInsFdbugt = 140
  fromEnum M68kInsFdbuge = 141
  fromEnum M68kInsFdbult = 142
  fromEnum M68kInsFdbule = 143
  fromEnum M68kInsFdbne = 144
  fromEnum M68kInsFdbt = 145
  fromEnum M68kInsFdbsf = 146
  fromEnum M68kInsFdbseq = 147
  fromEnum M68kInsFdbgt = 148
  fromEnum M68kInsFdbge = 149
  fromEnum M68kInsFdblt = 150
  fromEnum M68kInsFdble = 151
  fromEnum M68kInsFdbgl = 152
  fromEnum M68kInsFdbgle = 153
  fromEnum M68kInsFdbngle = 154
  fromEnum M68kInsFdbngl = 155
  fromEnum M68kInsFdbnle = 156
  fromEnum M68kInsFdbnlt = 157
  fromEnum M68kInsFdbnge = 158
  fromEnum M68kInsFdbngt = 159
  fromEnum M68kInsFdbsne = 160
  fromEnum M68kInsFdbst = 161
  fromEnum M68kInsFdiv = 162
  fromEnum M68kInsFsdiv = 163
  fromEnum M68kInsFddiv = 164
  fromEnum M68kInsFetox = 165
  fromEnum M68kInsFetoxm1 = 166
  fromEnum M68kInsFgetexp = 167
  fromEnum M68kInsFgetman = 168
  fromEnum M68kInsFint = 169
  fromEnum M68kInsFintrz = 170
  fromEnum M68kInsFlog10 = 171
  fromEnum M68kInsFlog2 = 172
  fromEnum M68kInsFlogn = 173
  fromEnum M68kInsFlognp1 = 174
  fromEnum M68kInsFmod = 175
  fromEnum M68kInsFmove = 176
  fromEnum M68kInsFsmove = 177
  fromEnum M68kInsFdmove = 178
  fromEnum M68kInsFmovecr = 179
  fromEnum M68kInsFmovem = 180
  fromEnum M68kInsFmul = 181
  fromEnum M68kInsFsmul = 182
  fromEnum M68kInsFdmul = 183
  fromEnum M68kInsFneg = 184
  fromEnum M68kInsFsneg = 185
  fromEnum M68kInsFdneg = 186
  fromEnum M68kInsFnop = 187
  fromEnum M68kInsFrem = 188
  fromEnum M68kInsFrestore = 189
  fromEnum M68kInsFsave = 190
  fromEnum M68kInsFscale = 191
  fromEnum M68kInsFsgldiv = 192
  fromEnum M68kInsFsglmul = 193
  fromEnum M68kInsFsin = 194
  fromEnum M68kInsFsincos = 195
  fromEnum M68kInsFsinh = 196
  fromEnum M68kInsFsqrt = 197
  fromEnum M68kInsFssqrt = 198
  fromEnum M68kInsFdsqrt = 199
  fromEnum M68kInsFsf = 200
  fromEnum M68kInsFsbeq = 201
  fromEnum M68kInsFsogt = 202
  fromEnum M68kInsFsoge = 203
  fromEnum M68kInsFsolt = 204
  fromEnum M68kInsFsole = 205
  fromEnum M68kInsFsogl = 206
  fromEnum M68kInsFsor = 207
  fromEnum M68kInsFsun = 208
  fromEnum M68kInsFsueq = 209
  fromEnum M68kInsFsugt = 210
  fromEnum M68kInsFsuge = 211
  fromEnum M68kInsFsult = 212
  fromEnum M68kInsFsule = 213
  fromEnum M68kInsFsne = 214
  fromEnum M68kInsFst = 215
  fromEnum M68kInsFssf = 216
  fromEnum M68kInsFsseq = 217
  fromEnum M68kInsFsgt = 218
  fromEnum M68kInsFsge = 219
  fromEnum M68kInsFslt = 220
  fromEnum M68kInsFsle = 221
  fromEnum M68kInsFsgl = 222
  fromEnum M68kInsFsgle = 223
  fromEnum M68kInsFsngle = 224
  fromEnum M68kInsFsngl = 225
  fromEnum M68kInsFsnle = 226
  fromEnum M68kInsFsnlt = 227
  fromEnum M68kInsFsnge = 228
  fromEnum M68kInsFsngt = 229
  fromEnum M68kInsFssne = 230
  fromEnum M68kInsFsst = 231
  fromEnum M68kInsFsub = 232
  fromEnum M68kInsFssub = 233
  fromEnum M68kInsFdsub = 234
  fromEnum M68kInsFtan = 235
  fromEnum M68kInsFtanh = 236
  fromEnum M68kInsFtentox = 237
  fromEnum M68kInsFtrapf = 238
  fromEnum M68kInsFtrapeq = 239
  fromEnum M68kInsFtrapogt = 240
  fromEnum M68kInsFtrapoge = 241
  fromEnum M68kInsFtrapolt = 242
  fromEnum M68kInsFtrapole = 243
  fromEnum M68kInsFtrapogl = 244
  fromEnum M68kInsFtrapor = 245
  fromEnum M68kInsFtrapun = 246
  fromEnum M68kInsFtrapueq = 247
  fromEnum M68kInsFtrapugt = 248
  fromEnum M68kInsFtrapuge = 249
  fromEnum M68kInsFtrapult = 250
  fromEnum M68kInsFtrapule = 251
  fromEnum M68kInsFtrapne = 252
  fromEnum M68kInsFtrapt = 253
  fromEnum M68kInsFtrapsf = 254
  fromEnum M68kInsFtrapseq = 255
  fromEnum M68kInsFtrapgt = 256
  fromEnum M68kInsFtrapge = 257
  fromEnum M68kInsFtraplt = 258
  fromEnum M68kInsFtraple = 259
  fromEnum M68kInsFtrapgl = 260
  fromEnum M68kInsFtrapgle = 261
  fromEnum M68kInsFtrapngle = 262
  fromEnum M68kInsFtrapngl = 263
  fromEnum M68kInsFtrapnle = 264
  fromEnum M68kInsFtrapnlt = 265
  fromEnum M68kInsFtrapnge = 266
  fromEnum M68kInsFtrapngt = 267
  fromEnum M68kInsFtrapsne = 268
  fromEnum M68kInsFtrapst = 269
  fromEnum M68kInsFtst = 270
  fromEnum M68kInsFtwotox = 271
  fromEnum M68kInsHalt = 272
  fromEnum M68kInsIllegal = 273
  fromEnum M68kInsJmp = 274
  fromEnum M68kInsJsr = 275
  fromEnum M68kInsLea = 276
  fromEnum M68kInsLink = 277
  fromEnum M68kInsLpstop = 278
  fromEnum M68kInsLsl = 279
  fromEnum M68kInsLsr = 280
  fromEnum M68kInsMove = 281
  fromEnum M68kInsMovea = 282
  fromEnum M68kInsMovec = 283
  fromEnum M68kInsMovem = 284
  fromEnum M68kInsMovep = 285
  fromEnum M68kInsMoveq = 286
  fromEnum M68kInsMoves = 287
  fromEnum M68kInsMove16 = 288
  fromEnum M68kInsMuls = 289
  fromEnum M68kInsMulu = 290
  fromEnum M68kInsNbcd = 291
  fromEnum M68kInsNeg = 292
  fromEnum M68kInsNegx = 293
  fromEnum M68kInsNop = 294
  fromEnum M68kInsNot = 295
  fromEnum M68kInsOr = 296
  fromEnum M68kInsOri = 297
  fromEnum M68kInsPack = 298
  fromEnum M68kInsPea = 299
  fromEnum M68kInsPflush = 300
  fromEnum M68kInsPflusha = 301
  fromEnum M68kInsPflushan = 302
  fromEnum M68kInsPflushn = 303
  fromEnum M68kInsPloadr = 304
  fromEnum M68kInsPloadw = 305
  fromEnum M68kInsPlpar = 306
  fromEnum M68kInsPlpaw = 307
  fromEnum M68kInsPmove = 308
  fromEnum M68kInsPmovefd = 309
  fromEnum M68kInsPtestr = 310
  fromEnum M68kInsPtestw = 311
  fromEnum M68kInsPulse = 312
  fromEnum M68kInsRems = 313
  fromEnum M68kInsRemu = 314
  fromEnum M68kInsReset = 315
  fromEnum M68kInsRol = 316
  fromEnum M68kInsRor = 317
  fromEnum M68kInsRoxl = 318
  fromEnum M68kInsRoxr = 319
  fromEnum M68kInsRtd = 320
  fromEnum M68kInsRte = 321
  fromEnum M68kInsRtm = 322
  fromEnum M68kInsRtr = 323
  fromEnum M68kInsRts = 324
  fromEnum M68kInsSbcd = 325
  fromEnum M68kInsSt = 326
  fromEnum M68kInsSf = 327
  fromEnum M68kInsShi = 328
  fromEnum M68kInsSls = 329
  fromEnum M68kInsScc = 330
  fromEnum M68kInsShs = 331
  fromEnum M68kInsScs = 332
  fromEnum M68kInsSlo = 333
  fromEnum M68kInsSne = 334
  fromEnum M68kInsSeq = 335
  fromEnum M68kInsSvc = 336
  fromEnum M68kInsSvs = 337
  fromEnum M68kInsSpl = 338
  fromEnum M68kInsSmi = 339
  fromEnum M68kInsSge = 340
  fromEnum M68kInsSlt = 341
  fromEnum M68kInsSgt = 342
  fromEnum M68kInsSle = 343
  fromEnum M68kInsStop = 344
  fromEnum M68kInsSub = 345
  fromEnum M68kInsSuba = 346
  fromEnum M68kInsSubi = 347
  fromEnum M68kInsSubq = 348
  fromEnum M68kInsSubx = 349
  fromEnum M68kInsSwap = 350
  fromEnum M68kInsTas = 351
  fromEnum M68kInsTrap = 352
  fromEnum M68kInsTrapv = 353
  fromEnum M68kInsTrapt = 354
  fromEnum M68kInsTrapf = 355
  fromEnum M68kInsTraphi = 356
  fromEnum M68kInsTrapls = 357
  fromEnum M68kInsTrapcc = 358
  fromEnum M68kInsTraphs = 359
  fromEnum M68kInsTrapcs = 360
  fromEnum M68kInsTraplo = 361
  fromEnum M68kInsTrapne = 362
  fromEnum M68kInsTrapeq = 363
  fromEnum M68kInsTrapvc = 364
  fromEnum M68kInsTrapvs = 365
  fromEnum M68kInsTrappl = 366
  fromEnum M68kInsTrapmi = 367
  fromEnum M68kInsTrapge = 368
  fromEnum M68kInsTraplt = 369
  fromEnum M68kInsTrapgt = 370
  fromEnum M68kInsTraple = 371
  fromEnum M68kInsTst = 372
  fromEnum M68kInsUnlk = 373
  fromEnum M68kInsUnpk = 374
  fromEnum M68kInsEnding = 375

  toEnum 0 = M68kInsInvalid
  toEnum 1 = M68kInsAbcd
  toEnum 2 = M68kInsAdd
  toEnum 3 = M68kInsAdda
  toEnum 4 = M68kInsAddi
  toEnum 5 = M68kInsAddq
  toEnum 6 = M68kInsAddx
  toEnum 7 = M68kInsAnd
  toEnum 8 = M68kInsAndi
  toEnum 9 = M68kInsAsl
  toEnum 10 = M68kInsAsr
  toEnum 11 = M68kInsBhs
  toEnum 12 = M68kInsBlo
  toEnum 13 = M68kInsBhi
  toEnum 14 = M68kInsBls
  toEnum 15 = M68kInsBcc
  toEnum 16 = M68kInsBcs
  toEnum 17 = M68kInsBne
  toEnum 18 = M68kInsBeq
  toEnum 19 = M68kInsBvc
  toEnum 20 = M68kInsBvs
  toEnum 21 = M68kInsBpl
  toEnum 22 = M68kInsBmi
  toEnum 23 = M68kInsBge
  toEnum 24 = M68kInsBlt
  toEnum 25 = M68kInsBgt
  toEnum 26 = M68kInsBle
  toEnum 27 = M68kInsBra
  toEnum 28 = M68kInsBsr
  toEnum 29 = M68kInsBchg
  toEnum 30 = M68kInsBclr
  toEnum 31 = M68kInsBset
  toEnum 32 = M68kInsBtst
  toEnum 33 = M68kInsBfchg
  toEnum 34 = M68kInsBfclr
  toEnum 35 = M68kInsBfexts
  toEnum 36 = M68kInsBfextu
  toEnum 37 = M68kInsBfffo
  toEnum 38 = M68kInsBfins
  toEnum 39 = M68kInsBfset
  toEnum 40 = M68kInsBftst
  toEnum 41 = M68kInsBkpt
  toEnum 42 = M68kInsCallm
  toEnum 43 = M68kInsCas
  toEnum 44 = M68kInsCas2
  toEnum 45 = M68kInsChk
  toEnum 46 = M68kInsChk2
  toEnum 47 = M68kInsClr
  toEnum 48 = M68kInsCmp
  toEnum 49 = M68kInsCmpa
  toEnum 50 = M68kInsCmpi
  toEnum 51 = M68kInsCmpm
  toEnum 52 = M68kInsCmp2
  toEnum 53 = M68kInsCinvl
  toEnum 54 = M68kInsCinvp
  toEnum 55 = M68kInsCinva
  toEnum 56 = M68kInsCpushl
  toEnum 57 = M68kInsCpushp
  toEnum 58 = M68kInsCpusha
  toEnum 59 = M68kInsDbt
  toEnum 60 = M68kInsDbf
  toEnum 61 = M68kInsDbhi
  toEnum 62 = M68kInsDbls
  toEnum 63 = M68kInsDbcc
  toEnum 64 = M68kInsDbcs
  toEnum 65 = M68kInsDbne
  toEnum 66 = M68kInsDbeq
  toEnum 67 = M68kInsDbvc
  toEnum 68 = M68kInsDbvs
  toEnum 69 = M68kInsDbpl
  toEnum 70 = M68kInsDbmi
  toEnum 71 = M68kInsDbge
  toEnum 72 = M68kInsDblt
  toEnum 73 = M68kInsDbgt
  toEnum 74 = M68kInsDble
  toEnum 75 = M68kInsDbra
  toEnum 76 = M68kInsDivs
  toEnum 77 = M68kInsDivsl
  toEnum 78 = M68kInsDivu
  toEnum 79 = M68kInsDivul
  toEnum 80 = M68kInsEor
  toEnum 81 = M68kInsEori
  toEnum 82 = M68kInsExg
  toEnum 83 = M68kInsExt
  toEnum 84 = M68kInsExtb
  toEnum 85 = M68kInsFabs
  toEnum 86 = M68kInsFsabs
  toEnum 87 = M68kInsFdabs
  toEnum 88 = M68kInsFacos
  toEnum 89 = M68kInsFadd
  toEnum 90 = M68kInsFsadd
  toEnum 91 = M68kInsFdadd
  toEnum 92 = M68kInsFasin
  toEnum 93 = M68kInsFatan
  toEnum 94 = M68kInsFatanh
  toEnum 95 = M68kInsFbf
  toEnum 96 = M68kInsFbeq
  toEnum 97 = M68kInsFbogt
  toEnum 98 = M68kInsFboge
  toEnum 99 = M68kInsFbolt
  toEnum 100 = M68kInsFbole
  toEnum 101 = M68kInsFbogl
  toEnum 102 = M68kInsFbor
  toEnum 103 = M68kInsFbun
  toEnum 104 = M68kInsFbueq
  toEnum 105 = M68kInsFbugt
  toEnum 106 = M68kInsFbuge
  toEnum 107 = M68kInsFbult
  toEnum 108 = M68kInsFbule
  toEnum 109 = M68kInsFbne
  toEnum 110 = M68kInsFbt
  toEnum 111 = M68kInsFbsf
  toEnum 112 = M68kInsFbseq
  toEnum 113 = M68kInsFbgt
  toEnum 114 = M68kInsFbge
  toEnum 115 = M68kInsFblt
  toEnum 116 = M68kInsFble
  toEnum 117 = M68kInsFbgl
  toEnum 118 = M68kInsFbgle
  toEnum 119 = M68kInsFbngle
  toEnum 120 = M68kInsFbngl
  toEnum 121 = M68kInsFbnle
  toEnum 122 = M68kInsFbnlt
  toEnum 123 = M68kInsFbnge
  toEnum 124 = M68kInsFbngt
  toEnum 125 = M68kInsFbsne
  toEnum 126 = M68kInsFbst
  toEnum 127 = M68kInsFcmp
  toEnum 128 = M68kInsFcos
  toEnum 129 = M68kInsFcosh
  toEnum 130 = M68kInsFdbf
  toEnum 131 = M68kInsFdbeq
  toEnum 132 = M68kInsFdbogt
  toEnum 133 = M68kInsFdboge
  toEnum 134 = M68kInsFdbolt
  toEnum 135 = M68kInsFdbole
  toEnum 136 = M68kInsFdbogl
  toEnum 137 = M68kInsFdbor
  toEnum 138 = M68kInsFdbun
  toEnum 139 = M68kInsFdbueq
  toEnum 140 = M68kInsFdbugt
  toEnum 141 = M68kInsFdbuge
  toEnum 142 = M68kInsFdbult
  toEnum 143 = M68kInsFdbule
  toEnum 144 = M68kInsFdbne
  toEnum 145 = M68kInsFdbt
  toEnum 146 = M68kInsFdbsf
  toEnum 147 = M68kInsFdbseq
  toEnum 148 = M68kInsFdbgt
  toEnum 149 = M68kInsFdbge
  toEnum 150 = M68kInsFdblt
  toEnum 151 = M68kInsFdble
  toEnum 152 = M68kInsFdbgl
  toEnum 153 = M68kInsFdbgle
  toEnum 154 = M68kInsFdbngle
  toEnum 155 = M68kInsFdbngl
  toEnum 156 = M68kInsFdbnle
  toEnum 157 = M68kInsFdbnlt
  toEnum 158 = M68kInsFdbnge
  toEnum 159 = M68kInsFdbngt
  toEnum 160 = M68kInsFdbsne
  toEnum 161 = M68kInsFdbst
  toEnum 162 = M68kInsFdiv
  toEnum 163 = M68kInsFsdiv
  toEnum 164 = M68kInsFddiv
  toEnum 165 = M68kInsFetox
  toEnum 166 = M68kInsFetoxm1
  toEnum 167 = M68kInsFgetexp
  toEnum 168 = M68kInsFgetman
  toEnum 169 = M68kInsFint
  toEnum 170 = M68kInsFintrz
  toEnum 171 = M68kInsFlog10
  toEnum 172 = M68kInsFlog2
  toEnum 173 = M68kInsFlogn
  toEnum 174 = M68kInsFlognp1
  toEnum 175 = M68kInsFmod
  toEnum 176 = M68kInsFmove
  toEnum 177 = M68kInsFsmove
  toEnum 178 = M68kInsFdmove
  toEnum 179 = M68kInsFmovecr
  toEnum 180 = M68kInsFmovem
  toEnum 181 = M68kInsFmul
  toEnum 182 = M68kInsFsmul
  toEnum 183 = M68kInsFdmul
  toEnum 184 = M68kInsFneg
  toEnum 185 = M68kInsFsneg
  toEnum 186 = M68kInsFdneg
  toEnum 187 = M68kInsFnop
  toEnum 188 = M68kInsFrem
  toEnum 189 = M68kInsFrestore
  toEnum 190 = M68kInsFsave
  toEnum 191 = M68kInsFscale
  toEnum 192 = M68kInsFsgldiv
  toEnum 193 = M68kInsFsglmul
  toEnum 194 = M68kInsFsin
  toEnum 195 = M68kInsFsincos
  toEnum 196 = M68kInsFsinh
  toEnum 197 = M68kInsFsqrt
  toEnum 198 = M68kInsFssqrt
  toEnum 199 = M68kInsFdsqrt
  toEnum 200 = M68kInsFsf
  toEnum 201 = M68kInsFsbeq
  toEnum 202 = M68kInsFsogt
  toEnum 203 = M68kInsFsoge
  toEnum 204 = M68kInsFsolt
  toEnum 205 = M68kInsFsole
  toEnum 206 = M68kInsFsogl
  toEnum 207 = M68kInsFsor
  toEnum 208 = M68kInsFsun
  toEnum 209 = M68kInsFsueq
  toEnum 210 = M68kInsFsugt
  toEnum 211 = M68kInsFsuge
  toEnum 212 = M68kInsFsult
  toEnum 213 = M68kInsFsule
  toEnum 214 = M68kInsFsne
  toEnum 215 = M68kInsFst
  toEnum 216 = M68kInsFssf
  toEnum 217 = M68kInsFsseq
  toEnum 218 = M68kInsFsgt
  toEnum 219 = M68kInsFsge
  toEnum 220 = M68kInsFslt
  toEnum 221 = M68kInsFsle
  toEnum 222 = M68kInsFsgl
  toEnum 223 = M68kInsFsgle
  toEnum 224 = M68kInsFsngle
  toEnum 225 = M68kInsFsngl
  toEnum 226 = M68kInsFsnle
  toEnum 227 = M68kInsFsnlt
  toEnum 228 = M68kInsFsnge
  toEnum 229 = M68kInsFsngt
  toEnum 230 = M68kInsFssne
  toEnum 231 = M68kInsFsst
  toEnum 232 = M68kInsFsub
  toEnum 233 = M68kInsFssub
  toEnum 234 = M68kInsFdsub
  toEnum 235 = M68kInsFtan
  toEnum 236 = M68kInsFtanh
  toEnum 237 = M68kInsFtentox
  toEnum 238 = M68kInsFtrapf
  toEnum 239 = M68kInsFtrapeq
  toEnum 240 = M68kInsFtrapogt
  toEnum 241 = M68kInsFtrapoge
  toEnum 242 = M68kInsFtrapolt
  toEnum 243 = M68kInsFtrapole
  toEnum 244 = M68kInsFtrapogl
  toEnum 245 = M68kInsFtrapor
  toEnum 246 = M68kInsFtrapun
  toEnum 247 = M68kInsFtrapueq
  toEnum 248 = M68kInsFtrapugt
  toEnum 249 = M68kInsFtrapuge
  toEnum 250 = M68kInsFtrapult
  toEnum 251 = M68kInsFtrapule
  toEnum 252 = M68kInsFtrapne
  toEnum 253 = M68kInsFtrapt
  toEnum 254 = M68kInsFtrapsf
  toEnum 255 = M68kInsFtrapseq
  toEnum 256 = M68kInsFtrapgt
  toEnum 257 = M68kInsFtrapge
  toEnum 258 = M68kInsFtraplt
  toEnum 259 = M68kInsFtraple
  toEnum 260 = M68kInsFtrapgl
  toEnum 261 = M68kInsFtrapgle
  toEnum 262 = M68kInsFtrapngle
  toEnum 263 = M68kInsFtrapngl
  toEnum 264 = M68kInsFtrapnle
  toEnum 265 = M68kInsFtrapnlt
  toEnum 266 = M68kInsFtrapnge
  toEnum 267 = M68kInsFtrapngt
  toEnum 268 = M68kInsFtrapsne
  toEnum 269 = M68kInsFtrapst
  toEnum 270 = M68kInsFtst
  toEnum 271 = M68kInsFtwotox
  toEnum 272 = M68kInsHalt
  toEnum 273 = M68kInsIllegal
  toEnum 274 = M68kInsJmp
  toEnum 275 = M68kInsJsr
  toEnum 276 = M68kInsLea
  toEnum 277 = M68kInsLink
  toEnum 278 = M68kInsLpstop
  toEnum 279 = M68kInsLsl
  toEnum 280 = M68kInsLsr
  toEnum 281 = M68kInsMove
  toEnum 282 = M68kInsMovea
  toEnum 283 = M68kInsMovec
  toEnum 284 = M68kInsMovem
  toEnum 285 = M68kInsMovep
  toEnum 286 = M68kInsMoveq
  toEnum 287 = M68kInsMoves
  toEnum 288 = M68kInsMove16
  toEnum 289 = M68kInsMuls
  toEnum 290 = M68kInsMulu
  toEnum 291 = M68kInsNbcd
  toEnum 292 = M68kInsNeg
  toEnum 293 = M68kInsNegx
  toEnum 294 = M68kInsNop
  toEnum 295 = M68kInsNot
  toEnum 296 = M68kInsOr
  toEnum 297 = M68kInsOri
  toEnum 298 = M68kInsPack
  toEnum 299 = M68kInsPea
  toEnum 300 = M68kInsPflush
  toEnum 301 = M68kInsPflusha
  toEnum 302 = M68kInsPflushan
  toEnum 303 = M68kInsPflushn
  toEnum 304 = M68kInsPloadr
  toEnum 305 = M68kInsPloadw
  toEnum 306 = M68kInsPlpar
  toEnum 307 = M68kInsPlpaw
  toEnum 308 = M68kInsPmove
  toEnum 309 = M68kInsPmovefd
  toEnum 310 = M68kInsPtestr
  toEnum 311 = M68kInsPtestw
  toEnum 312 = M68kInsPulse
  toEnum 313 = M68kInsRems
  toEnum 314 = M68kInsRemu
  toEnum 315 = M68kInsReset
  toEnum 316 = M68kInsRol
  toEnum 317 = M68kInsRor
  toEnum 318 = M68kInsRoxl
  toEnum 319 = M68kInsRoxr
  toEnum 320 = M68kInsRtd
  toEnum 321 = M68kInsRte
  toEnum 322 = M68kInsRtm
  toEnum 323 = M68kInsRtr
  toEnum 324 = M68kInsRts
  toEnum 325 = M68kInsSbcd
  toEnum 326 = M68kInsSt
  toEnum 327 = M68kInsSf
  toEnum 328 = M68kInsShi
  toEnum 329 = M68kInsSls
  toEnum 330 = M68kInsScc
  toEnum 331 = M68kInsShs
  toEnum 332 = M68kInsScs
  toEnum 333 = M68kInsSlo
  toEnum 334 = M68kInsSne
  toEnum 335 = M68kInsSeq
  toEnum 336 = M68kInsSvc
  toEnum 337 = M68kInsSvs
  toEnum 338 = M68kInsSpl
  toEnum 339 = M68kInsSmi
  toEnum 340 = M68kInsSge
  toEnum 341 = M68kInsSlt
  toEnum 342 = M68kInsSgt
  toEnum 343 = M68kInsSle
  toEnum 344 = M68kInsStop
  toEnum 345 = M68kInsSub
  toEnum 346 = M68kInsSuba
  toEnum 347 = M68kInsSubi
  toEnum 348 = M68kInsSubq
  toEnum 349 = M68kInsSubx
  toEnum 350 = M68kInsSwap
  toEnum 351 = M68kInsTas
  toEnum 352 = M68kInsTrap
  toEnum 353 = M68kInsTrapv
  toEnum 354 = M68kInsTrapt
  toEnum 355 = M68kInsTrapf
  toEnum 356 = M68kInsTraphi
  toEnum 357 = M68kInsTrapls
  toEnum 358 = M68kInsTrapcc
  toEnum 359 = M68kInsTraphs
  toEnum 360 = M68kInsTrapcs
  toEnum 361 = M68kInsTraplo
  toEnum 362 = M68kInsTrapne
  toEnum 363 = M68kInsTrapeq
  toEnum 364 = M68kInsTrapvc
  toEnum 365 = M68kInsTrapvs
  toEnum 366 = M68kInsTrappl
  toEnum 367 = M68kInsTrapmi
  toEnum 368 = M68kInsTrapge
  toEnum 369 = M68kInsTraplt
  toEnum 370 = M68kInsTrapgt
  toEnum 371 = M68kInsTraple
  toEnum 372 = M68kInsTst
  toEnum 373 = M68kInsUnlk
  toEnum 374 = M68kInsUnpk
  toEnum 375 = M68kInsEnding
  toEnum unmatched = error ("M68KInsn.toEnum: Cannot match " ++ show unmatched)

{-# LINE 223 "src/Hapstone/Internal/M68K.chs" #-}


-- | M68K instruction groups
data M68KGroupType = M68kGrpInvalid
                   | M68kGrpJump
                   | M68kGrpRet
                   | M68kGrpIret
                   | M68kGrpEnding
  deriving (Show,Eq,Bounded)
instance Enum M68KGroupType where
  succ M68kGrpInvalid = M68kGrpJump
  succ M68kGrpJump = M68kGrpRet
  succ M68kGrpRet = M68kGrpIret
  succ M68kGrpIret = M68kGrpEnding
  succ M68kGrpEnding = error "M68KGroupType.succ: M68kGrpEnding has no successor"

  pred M68kGrpJump = M68kGrpInvalid
  pred M68kGrpRet = M68kGrpJump
  pred M68kGrpIret = M68kGrpRet
  pred M68kGrpEnding = M68kGrpIret
  pred M68kGrpInvalid = error "M68KGroupType.pred: M68kGrpInvalid has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from M68kGrpEnding

  fromEnum M68kGrpInvalid = 0
  fromEnum M68kGrpJump = 1
  fromEnum M68kGrpRet = 3
  fromEnum M68kGrpIret = 5
  fromEnum M68kGrpEnding = 6

  toEnum 0 = M68kGrpInvalid
  toEnum 1 = M68kGrpJump
  toEnum 3 = M68kGrpRet
  toEnum 5 = M68kGrpIret
  toEnum 6 = M68kGrpEnding
  toEnum unmatched = error ("M68KGroupType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 227 "src/Hapstone/Internal/M68K.chs" #-}