-- GENERATED by C->Haskell Compiler, version 0.28.8 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Hapstone/Internal/XCore.chs" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-|
Module      : Hapstone.Internal.XCore
Description : XCore 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 XCore 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.XCore where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Storable as C2HSImp






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


import Foreign
import Foreign.C.Types

-- | operand type for instruction's operands
data XCoreOpType = XcoreOpInvalid
                 | XcoreOpReg
                 | XcoreOpImm
                 | XcoreOpMem
  deriving (Int -> XCoreOpType -> ShowS
[XCoreOpType] -> ShowS
XCoreOpType -> String
(Int -> XCoreOpType -> ShowS)
-> (XCoreOpType -> String)
-> ([XCoreOpType] -> ShowS)
-> Show XCoreOpType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [XCoreOpType] -> ShowS
$cshowList :: [XCoreOpType] -> ShowS
show :: XCoreOpType -> String
$cshow :: XCoreOpType -> String
showsPrec :: Int -> XCoreOpType -> ShowS
$cshowsPrec :: Int -> XCoreOpType -> ShowS
Show,XCoreOpType -> XCoreOpType -> Bool
(XCoreOpType -> XCoreOpType -> Bool)
-> (XCoreOpType -> XCoreOpType -> Bool) -> Eq XCoreOpType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: XCoreOpType -> XCoreOpType -> Bool
$c/= :: XCoreOpType -> XCoreOpType -> Bool
== :: XCoreOpType -> XCoreOpType -> Bool
$c== :: XCoreOpType -> XCoreOpType -> Bool
Eq,XCoreOpType
XCoreOpType -> XCoreOpType -> Bounded XCoreOpType
forall a. a -> a -> Bounded a
maxBound :: XCoreOpType
$cmaxBound :: XCoreOpType
minBound :: XCoreOpType
$cminBound :: XCoreOpType
Bounded)
instance Enum XCoreOpType where
  succ :: XCoreOpType -> XCoreOpType
succ XCoreOpType
XcoreOpInvalid = XCoreOpType
XcoreOpReg
  succ XCoreOpType
XcoreOpReg = XCoreOpType
XcoreOpImm
  succ XCoreOpType
XcoreOpImm = XCoreOpType
XcoreOpMem
  succ XCoreOpType
XcoreOpMem = String -> XCoreOpType
forall a. HasCallStack => String -> a
error String
"XCoreOpType.succ: XcoreOpMem has no successor"

  pred :: XCoreOpType -> XCoreOpType
pred XCoreOpType
XcoreOpReg = XCoreOpType
XcoreOpInvalid
  pred XCoreOpType
XcoreOpImm = XCoreOpType
XcoreOpReg
  pred XCoreOpType
XcoreOpMem = XCoreOpType
XcoreOpImm
  pred XCoreOpType
XcoreOpInvalid = String -> XCoreOpType
forall a. HasCallStack => String -> a
error String
"XCoreOpType.pred: XcoreOpInvalid 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 XcoreOpMem

  fromEnum :: XCoreOpType -> Int
fromEnum XCoreOpType
XcoreOpInvalid = Int
0
  fromEnum XCoreOpType
XcoreOpReg = Int
1
  fromEnum XCoreOpType
XcoreOpImm = Int
2
  fromEnum XCoreOpType
XcoreOpMem = Int
3

  toEnum :: Int -> XCoreOpType
toEnum Int
0 = XCoreOpType
XcoreOpInvalid
  toEnum Int
1 = XCoreOpType
XcoreOpReg
  toEnum Int
2 = XCoreOpType
XcoreOpImm
  toEnum Int
3 = XCoreOpType
XcoreOpMem
  toEnum Int
unmatched = String -> XCoreOpType
forall a. HasCallStack => String -> a
error (String
"XCoreOpType.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

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


-- | XCore registers
data XCoreReg = XcoreRegInvalid
              | XcoreRegCp
              | XcoreRegDp
              | XcoreRegLr
              | XcoreRegSp
              | XcoreRegR0
              | XcoreRegR1
              | XcoreRegR2
              | XcoreRegR3
              | XcoreRegR4
              | XcoreRegR5
              | XcoreRegR6
              | XcoreRegR7
              | XcoreRegR8
              | XcoreRegR9
              | XcoreRegR10
              | XcoreRegR11
              | XcoreRegPc
              | XcoreRegScp
              | XcoreRegSsr
              | XcoreRegEt
              | XcoreRegEd
              | XcoreRegSed
              | XcoreRegKep
              | XcoreRegKsp
              | XcoreRegId
              | XcoreRegEnding
  deriving (Show,Eq,Bounded)
instance Enum XCoreReg where
  succ XcoreRegInvalid = XcoreRegCp
  succ XcoreRegCp = XcoreRegDp
  succ XcoreRegDp = XcoreRegLr
  succ XcoreRegLr = XcoreRegSp
  succ XcoreRegSp = XcoreRegR0
  succ XcoreRegR0 = XcoreRegR1
  succ XcoreRegR1 = XcoreRegR2
  succ XcoreRegR2 = XcoreRegR3
  succ XcoreRegR3 = XcoreRegR4
  succ XcoreRegR4 = XcoreRegR5
  succ XcoreRegR5 = XcoreRegR6
  succ XcoreRegR6 = XcoreRegR7
  succ XcoreRegR7 = XcoreRegR8
  succ XcoreRegR8 = XcoreRegR9
  succ XcoreRegR9 = XcoreRegR10
  succ XcoreRegR10 = XcoreRegR11
  succ XcoreRegR11 = XcoreRegPc
  succ XcoreRegPc = XcoreRegScp
  succ XcoreRegScp = XcoreRegSsr
  succ XcoreRegSsr = XcoreRegEt
  succ XcoreRegEt = XcoreRegEd
  succ XcoreRegEd = XcoreRegSed
  succ XcoreRegSed = XcoreRegKep
  succ XcoreRegKep = XcoreRegKsp
  succ XcoreRegKsp = XcoreRegId
  succ XcoreRegId = XcoreRegEnding
  succ XcoreRegEnding = error "XCoreReg.succ: XcoreRegEnding has no successor"

  pred :: XCoreReg -> XCoreReg
pred XCoreReg
XcoreRegCp = XCoreReg
XcoreRegInvalid
  pred XCoreReg
XcoreRegDp = XCoreReg
XcoreRegCp
  pred XCoreReg
XcoreRegLr = XCoreReg
XcoreRegDp
  pred XCoreReg
XcoreRegSp = XCoreReg
XcoreRegLr
  pred XCoreReg
XcoreRegR0 = XCoreReg
XcoreRegSp
  pred XCoreReg
XcoreRegR1 = XCoreReg
XcoreRegR0
  pred XCoreReg
XcoreRegR2 = XCoreReg
XcoreRegR1
  pred XcoreRegR3 = XcoreRegR2
  pred XcoreRegR4 = XcoreRegR3
  pred XcoreRegR5 = XcoreRegR4
  pred XcoreRegR6 = XcoreRegR5
  pred XcoreRegR7 = XcoreRegR6
  pred XcoreRegR8 = XcoreRegR7
  pred XcoreRegR9 = XcoreRegR8
  pred XcoreRegR10 = XcoreRegR9
  pred XcoreRegR11 = XcoreRegR10
  pred XcoreRegPc = XcoreRegR11
  pred XcoreRegScp = XcoreRegPc
  pred XCoreReg
XcoreRegSsr = XCoreReg
XcoreRegScp
  pred XCoreReg
XcoreRegEt = XCoreReg
XcoreRegSsr
  pred XCoreReg
XcoreRegEd = XCoreReg
XcoreRegEt
  pred XCoreReg
XcoreRegSed = XCoreReg
XcoreRegEd
  pred XCoreReg
XcoreRegKep = XCoreReg
XcoreRegSed
  pred XCoreReg
XcoreRegKsp = XCoreReg
XcoreRegKep
  pred XCoreReg
XcoreRegId = XCoreReg
XcoreRegKsp
  pred XCoreReg
XcoreRegEnding = XCoreReg
XcoreRegId
  pred XCoreReg
XcoreRegInvalid = String -> XCoreReg
forall a. HasCallStack => String -> a
error String
"XCoreReg.pred: XcoreRegInvalid has no predecessor"

  enumFromTo :: XCoreReg -> XCoreReg -> [XCoreReg]
enumFromTo XCoreReg
from XCoreReg
to = go from
    where
      end = fromEnum to
      go :: t -> [t]
go t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
                 Ordering
LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
                 Ordering
EQ -> [t
v]
                 Ordering
GT -> []

  enumFrom :: XCoreReg -> [XCoreReg]
enumFrom XCoreReg
from = XCoreReg -> XCoreReg -> [XCoreReg]
forall a. Enum a => a -> a -> [a]
enumFromTo XCoreReg
from XCoreReg
XcoreRegEnding

  fromEnum XcoreRegInvalid = 0
  fromEnum XcoreRegCp = 1
  fromEnum XcoreRegDp = 2
  fromEnum XcoreRegLr = 3
  fromEnum XcoreRegSp = 4
  fromEnum XcoreRegR0 = 5
  enumFrom :: XCoreInsnGroup -> [XCoreInsnGroup]
fromEnum XcoreRegR1 = 6
  fromEnum XcoreRegR2 = 7
  fromEnum :: XCoreInsnGroup -> Int
fromEnum XcoreRegR3 = 8
  fromEnum XcoreRegR4 = 9
  fromEnum XcoreRegR5 = 10
  fromEnum XcoreRegR6 = 11
  fromEnum XcoreRegR7 = 12
  fromEnum XcoreRegR8 = 13
  fromEnum XcoreRegR9 = 14
  fromEnum XcoreRegR10 = 15
  fromEnum XcoreRegR11 = 16
  fromEnum XcoreRegPc = 17
  fromEnum XcoreRegScp = 18
  fromEnum XcoreRegSsr = 19
  fromEnum XcoreRegEt = 20
  fromEnum XcoreRegEd = 21
  fromEnum XcoreRegSed = 22
  fromEnum XcoreRegKep = 23
  fromEnum XcoreRegKsp = 24
  fromEnum XcoreRegId = 25
  fromEnum XcoreRegEnding = 26

  toEnum :: Int -> XCoreReg
toEnum Int
0 = XCoreReg
XcoreRegInvalid
  toEnum Int
1 = XCoreReg
XcoreRegCp
  toEnum Int
2 = XCoreReg
XcoreRegDp
  toEnum Int
3 = XCoreReg
XcoreRegLr
  toEnum Int
4 = XCoreReg
XcoreRegSp
  toEnum Int
5 = XCoreReg
XcoreRegR0
  toEnum Int
6 = XCoreReg
XcoreRegR1
  toEnum Int
7 = XCoreReg
XcoreRegR2
  toEnum Int
8 = XCoreReg
XcoreRegR3
  toEnum Int
9 = XCoreReg
XcoreRegR4
  toEnum Int
10 = XCoreReg
XcoreRegR5
  toEnum Int
11 = XCoreReg
XcoreRegR6
  toEnum Int
12 = XCoreReg
XcoreRegR7
  toEnum Int
13 = XCoreReg
XcoreRegR8
  toEnum Int
14 = XCoreReg
XcoreRegR9
  toEnum Int
15 = XCoreReg
XcoreRegR10
  toEnum Int
16 = XCoreReg
XcoreRegR11
  toEnum Int
17 = XCoreReg
XcoreRegPc
  toEnum Int
18 = XCoreReg
XcoreRegScp
  toEnum Int
19 = XCoreReg
XcoreRegSsr
  toEnum Int
20 = XCoreReg
XcoreRegEt
  toEnum Int
21 = XCoreReg
XcoreRegEd
  toEnum Int
22 = XCoreReg
XcoreRegSed
  toEnum Int
23 = XCoreReg
XcoreRegKep
  toEnum Int
24 = XCoreReg
XcoreRegKsp
  toEnum Int
25 = XCoreReg
XcoreRegId
  toEnum Int
26 = XCoreReg
XcoreRegEnding
  toEnum Int
unmatched = String -> XCoreReg
forall a. HasCallStack => String -> a
error (String
"XCoreReg.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

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


-- | memory access operands
-- associated with 'XcoreOpMem' operand type
data XCoreOpMemStruct = XCoreOpMemStruct
    { base :: Word8 -- ^ base register
    , index :: Word8 -- ^ index register
    , disp :: Int32 -- ^ displacement/offset value
    , direct :: Int32 -- ^ +1: forward, -1: backward
    } deriving (Show, Eq)

instance Storable XCoreOpMemStruct where
    sizeOf _ = 12
{-# LINE 48 "src/Hapstone/Internal/XCore.chs" #-}

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

    peek p = XCoreOpMemStruct
        <$> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CUChar}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 1 :: IO C2HSImp.CUChar}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CInt}) p)
    poke p (XCoreOpMemStruct b i disp dir) = do
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CUChar)}) p (fromIntegral b)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 1 (val :: C2HSImp.CUChar)}) p (fromIntegral i)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 4 (val :: C2HSImp.CInt)}) p (fromIntegral disp)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 8 (val :: C2HSImp.CInt)}) p (fromIntegral dir)

-- | instruction operand
data CsXCoreOp
    = Reg XCoreReg -- ^ register value for 'XcoreOpReg' operands
    | Imm Int32 -- ^ immediate value for 'XcoreOpImm' operands
    | Mem XCoreOpMemStruct -- ^ base/index/disp/direct value for 'XcoreOpMem'
                           -- operands
    | Undefined -- ^ invalid operand value, for 'XcoreOpInvalid' operand
    deriving (Show, Eq)

instance Storable CsXCoreOp where
    sizeOf _ = 16
    alignment _ = 4
    peek p = do
        t <- fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p
        let bP = plusPtr p 4
        case toEnum t of
          XcoreOpReg -> (Reg . toEnum . fromIntegral) <$> (peek bP :: IO Int32)
          XcoreOpImm -> Imm <$> peek bP
          XcoreOpMem -> Mem <$> peek bP
          _ -> return Undefined
    poke p op = do
        let bP = plusPtr p 4
            setType = (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CInt)}) p . fromIntegral . fromEnum
        case op of
          Reg r -> do poke bP (fromIntegral $ fromEnum r :: Int32)
                      setType XcoreOpReg
          Imm i -> poke bP i >> setType XcoreOpImm
          Mem m -> poke bP m >> setType XcoreOpMem
          _ -> setType XcoreOpInvalid

-- | instruction datatype
newtype CsXCore = CsXCore [CsXCoreOp] -- ^ operand list of this instruction,
                                      -- *MUST* have <= 8 operands, else you'll
                                      -- get a runtime error when you
                                      -- (implicitly) try to write it to memory
                                      -- via it's Storable instance
    deriving (Show, Eq)

instance Storable CsXCore where
    sizeOf _ = 132
    alignment _ = 4
    peek p = do
        num <- fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CUChar}) p
        CsXCore <$> peekArray num (plusPtr p (4))
    poke p (CsXCore o) = do
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CUChar)}) p (fromIntegral $ length o)
        if length o > 8
           then error "operands overflew 8 elements"
           else pokeArray (plusPtr p (4)) o

-- | XCore instructions
data XCoreInsn = XcoreInsInvalid
               | XcoreInsAdd
               | XcoreInsAndnot
               | XcoreInsAnd
               | XcoreInsAshr
               | XcoreInsBau
               | XcoreInsBitrev
               | XcoreInsBla
               | XcoreInsBlat
               | XcoreInsBl
               | XcoreInsBf
               | XcoreInsBt
               | XcoreInsBu
               | XcoreInsBru
               | XcoreInsByterev
               | XcoreInsChkct
               | XcoreInsClre
               | XcoreInsClrpt
               | XcoreInsClrsr
               | XcoreInsClz
               | XcoreInsCrc8
               | XcoreInsCrc32
               | XcoreInsDcall
               | XcoreInsDentsp
               | XcoreInsDgetreg
               | XcoreInsDivs
               | XcoreInsDivu
               | XcoreInsDrestsp
               | XcoreInsDret
               | XcoreInsEcallf
               | XcoreInsEcallt
               | XcoreInsEdu
               | XcoreInsEef
               | XcoreInsEet
               | XcoreInsEeu
               | XcoreInsEndin
               | XcoreInsEntsp
               | XcoreInsEq
               | XcoreInsExtdp
               | XcoreInsExtsp
               | XcoreInsFreer
               | XcoreInsFreet
               | XcoreInsGetd
               | XcoreInsGet
               | XcoreInsGetn
               | XcoreInsGetr
               | XcoreInsGetsr
               | XcoreInsGetst
               | XcoreInsGetts
               | XcoreInsInct
               | XcoreInsInit
               | XcoreInsInpw
               | XcoreInsInshr
               | XcoreInsInt
               | XcoreInsIn
               | XcoreInsKcall
               | XcoreInsKentsp
               | XcoreInsKrestsp
               | XcoreInsKret
               | XcoreInsLadd
               | XcoreInsLd16s
               | XcoreInsLd8u
               | XcoreInsLda16
               | XcoreInsLdap
               | XcoreInsLdaw
               | XcoreInsLdc
               | XcoreInsLdw
               | XcoreInsLdivu
               | XcoreInsLmul
               | XcoreInsLss
               | XcoreInsLsub
               | XcoreInsLsu
               | XcoreInsMaccs
               | XcoreInsMaccu
               | XcoreInsMjoin
               | XcoreInsMkmsk
               | XcoreInsMsync
               | XcoreInsMul
               | XcoreInsNeg
               | XcoreInsNot
               | XcoreInsOr
               | XcoreInsOutct
               | XcoreInsOutpw
               | XcoreInsOutshr
               | XcoreInsOutt
               | XcoreInsOut
               | XcoreInsPeek
               | XcoreInsRems
               | XcoreInsRemu
               | XcoreInsRetsp
               | XcoreInsSetclk
               | XcoreInsSet
               | XcoreInsSetc
               | XcoreInsSetd
               | XcoreInsSetev
               | XcoreInsSetn
               | XcoreInsSetpsc
               | XcoreInsSetpt
               | XcoreInsSetrdy
               | XcoreInsSetsr
               | XcoreInsSettw
               | XcoreInsSetv
               | XcoreInsSext
               | XcoreInsShl
               | XcoreInsShr
               | XcoreInsSsync
               | XcoreInsSt16
               | XcoreInsSt8
               | XcoreInsStw
               | XcoreInsSub
               | XcoreInsSyncr
               | XcoreInsTestct
               | XcoreInsTestlcl
               | XcoreInsTestwct
               | XcoreInsTsetmr
               | XcoreInsStart
               | XcoreInsWaitef
               | XcoreInsWaitet
               | XcoreInsWaiteu
               | XcoreInsXor
               | XcoreInsZext
               | XcoreInsEnding
  deriving (Int -> XCoreInsn -> ShowS
[XCoreInsn] -> ShowS
XCoreInsn -> String
(Int -> XCoreInsn -> ShowS)
-> (XCoreInsn -> String)
-> ([XCoreInsn] -> ShowS)
-> Show XCoreInsn
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [XCoreInsn] -> ShowS
$cshowList :: [XCoreInsn] -> ShowS
show :: XCoreInsn -> String
$cshow :: XCoreInsn -> String
showsPrec :: Int -> XCoreInsn -> ShowS
$cshowsPrec :: Int -> XCoreInsn -> ShowS
Show,XCoreInsn -> XCoreInsn -> Bool
(XCoreInsn -> XCoreInsn -> Bool)
-> (XCoreInsn -> XCoreInsn -> Bool) -> Eq XCoreInsn
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: XCoreInsn -> XCoreInsn -> Bool
$c/= :: XCoreInsn -> XCoreInsn -> Bool
== :: XCoreInsn -> XCoreInsn -> Bool
$c== :: XCoreInsn -> XCoreInsn -> Bool
Eq,XCoreInsn
XCoreInsn -> XCoreInsn -> Bounded XCoreInsn
forall a. a -> a -> Bounded a
maxBound :: XCoreInsn
$cmaxBound :: XCoreInsn
minBound :: XCoreInsn
$cminBound :: XCoreInsn
Bounded)
instance Enum XCoreInsn where
  succ :: XCoreInsn -> XCoreInsn
succ XCoreInsn
XcoreInsInvalid = XCoreInsn
XcoreInsAdd
  succ XCoreInsn
XcoreInsAdd = XCoreInsn
XcoreInsAndnot
  succ XCoreInsn
XcoreInsAndnot = XCoreInsn
XcoreInsAnd
  succ XCoreInsn
XcoreInsAnd = XCoreInsn
XcoreInsAshr
  succ XCoreInsn
XcoreInsAshr = XCoreInsn
XcoreInsBau
  succ XCoreInsn
XcoreInsBau = XCoreInsn
XcoreInsBitrev
  succ XCoreInsn
XcoreInsBitrev = XCoreInsn
XcoreInsBla
  succ XCoreInsn
XcoreInsBla = XCoreInsn
XcoreInsBlat
  succ XCoreInsn
XcoreInsBlat = XCoreInsn
XcoreInsBl
  succ XCoreInsn
XcoreInsBl = XCoreInsn
XcoreInsBf
  succ XCoreInsn
XcoreInsBf = XCoreInsn
XcoreInsBt
  succ XCoreInsn
XcoreInsBt = XCoreInsn
XcoreInsBu
  succ XCoreInsn
XcoreInsBu = XCoreInsn
XcoreInsBru
  succ XCoreInsn
XcoreInsBru = XCoreInsn
XcoreInsByterev
  succ XCoreInsn
XcoreInsByterev = XCoreInsn
XcoreInsChkct
  succ XCoreInsn
XcoreInsChkct = XCoreInsn
XcoreInsClre
  succ XCoreInsn
XcoreInsClre = XCoreInsn
XcoreInsClrpt
  succ XCoreInsn
XcoreInsClrpt = XCoreInsn
XcoreInsClrsr
  succ XCoreInsn
XcoreInsClrsr = XCoreInsn
XcoreInsClz
  succ XCoreInsn
XcoreInsClz = XCoreInsn
XcoreInsCrc8
  succ XCoreInsn
XcoreInsCrc8 = XCoreInsn
XcoreInsCrc32
  succ XCoreInsn
XcoreInsCrc32 = XCoreInsn
XcoreInsDcall
  succ XCoreInsn
XcoreInsDcall = XCoreInsn
XcoreInsDentsp
  succ XCoreInsn
XcoreInsDentsp = XCoreInsn
XcoreInsDgetreg
  succ XCoreInsn
XcoreInsDgetreg = XCoreInsn
XcoreInsDivs
  succ XCoreInsn
XcoreInsDivs = XCoreInsn
XcoreInsDivu
  succ XCoreInsn
XcoreInsDivu = XCoreInsn
XcoreInsDrestsp
  succ XCoreInsn
XcoreInsDrestsp = XCoreInsn
XcoreInsDret
  succ XCoreInsn
XcoreInsDret = XCoreInsn
XcoreInsEcallf
  succ XCoreInsn
XcoreInsEcallf = XCoreInsn
XcoreInsEcallt
  succ XCoreInsn
XcoreInsEcallt = XCoreInsn
XcoreInsEdu
  succ XCoreInsn
XcoreInsEdu = XCoreInsn
XcoreInsEef
  succ XCoreInsn
XcoreInsEef = XCoreInsn
XcoreInsEet
  succ XCoreInsn
XcoreInsEet = XCoreInsn
XcoreInsEeu
  succ XCoreInsn
XcoreInsEeu = XCoreInsn
XcoreInsEndin
  succ XCoreInsn
XcoreInsEndin = XCoreInsn
XcoreInsEntsp
  succ XCoreInsn
XcoreInsEntsp = XCoreInsn
XcoreInsEq
  succ XCoreInsn
XcoreInsEq = XCoreInsn
XcoreInsExtdp
  succ XCoreInsn
XcoreInsExtdp = XCoreInsn
XcoreInsExtsp
  succ XCoreInsn
XcoreInsExtsp = XCoreInsn
XcoreInsFreer
  succ XCoreInsn
XcoreInsFreer = XCoreInsn
XcoreInsFreet
  succ XCoreInsn
XcoreInsFreet = XCoreInsn
XcoreInsGetd
  succ XCoreInsn
XcoreInsGetd = XCoreInsn
XcoreInsGet
  succ XCoreInsn
XcoreInsGet = XCoreInsn
XcoreInsGetn
  succ XCoreInsn
XcoreInsGetn = XCoreInsn
XcoreInsGetr
  succ XCoreInsn
XcoreInsGetr = XCoreInsn
XcoreInsGetsr
  succ XCoreInsn
XcoreInsGetsr = XCoreInsn
XcoreInsGetst
  succ XCoreInsn
XcoreInsGetst = XCoreInsn
XcoreInsGetts
  succ XCoreInsn
XcoreInsGetts = XCoreInsn
XcoreInsInct
  succ XCoreInsn
XcoreInsInct = XCoreInsn
XcoreInsInit
  succ XCoreInsn
XcoreInsInit = XCoreInsn
XcoreInsInpw
  succ XCoreInsn
XcoreInsInpw = XCoreInsn
XcoreInsInshr
  succ XCoreInsn
XcoreInsInshr = XCoreInsn
XcoreInsInt
  succ XCoreInsn
XcoreInsInt = XCoreInsn
XcoreInsIn
  succ XCoreInsn
XcoreInsIn = XCoreInsn
XcoreInsKcall
  succ XCoreInsn
XcoreInsKcall = XCoreInsn
XcoreInsKentsp
  succ XCoreInsn
XcoreInsKentsp = XCoreInsn
XcoreInsKrestsp
  succ XCoreInsn
XcoreInsKrestsp = XCoreInsn
XcoreInsKret
  succ XCoreInsn
XcoreInsKret = XCoreInsn
XcoreInsLadd
  succ XCoreInsn
XcoreInsLadd = XCoreInsn
XcoreInsLd16s
  succ XCoreInsn
XcoreInsLd16s = XCoreInsn
XcoreInsLd8u
  succ XCoreInsn
XcoreInsLd8u = XCoreInsn
XcoreInsLda16
  succ XCoreInsn
XcoreInsLda16 = XCoreInsn
XcoreInsLdap
  succ XCoreInsn
XcoreInsLdap = XCoreInsn
XcoreInsLdaw
  succ XCoreInsn
XcoreInsLdaw = XCoreInsn
XcoreInsLdc
  succ XCoreInsn
XcoreInsLdc = XCoreInsn
XcoreInsLdw
  succ XCoreInsn
XcoreInsLdw = XCoreInsn
XcoreInsLdivu
  succ XCoreInsn
XcoreInsLdivu = XCoreInsn
XcoreInsLmul
  succ XCoreInsn
XcoreInsLmul = XCoreInsn
XcoreInsLss
  succ XCoreInsn
XcoreInsLss = XCoreInsn
XcoreInsLsub
  succ XCoreInsn
XcoreInsLsub = XCoreInsn
XcoreInsLsu
  succ XCoreInsn
XcoreInsLsu = XCoreInsn
XcoreInsMaccs
  succ XCoreInsn
XcoreInsMaccs = XCoreInsn
XcoreInsMaccu
  succ XCoreInsn
XcoreInsMaccu = XCoreInsn
XcoreInsMjoin
  succ XCoreInsn
XcoreInsMjoin = XCoreInsn
XcoreInsMkmsk
  succ XCoreInsn
XcoreInsMkmsk = XCoreInsn
XcoreInsMsync
  succ XCoreInsn
XcoreInsMsync = XCoreInsn
XcoreInsMul
  succ XCoreInsn
XcoreInsMul = XCoreInsn
XcoreInsNeg
  succ XCoreInsn
XcoreInsNeg = XCoreInsn
XcoreInsNot
  succ XCoreInsn
XcoreInsNot = XCoreInsn
XcoreInsOr
  succ XCoreInsn
XcoreInsOr = XCoreInsn
XcoreInsOutct
  succ XCoreInsn
XcoreInsOutct = XCoreInsn
XcoreInsOutpw
  succ XCoreInsn
XcoreInsOutpw = XCoreInsn
XcoreInsOutshr
  succ XCoreInsn
XcoreInsOutshr = XCoreInsn
XcoreInsOutt
  succ XCoreInsn
XcoreInsOutt = XCoreInsn
XcoreInsOut
  succ XCoreInsn
XcoreInsOut = XCoreInsn
XcoreInsPeek
  succ XCoreInsn
XcoreInsPeek = XCoreInsn
XcoreInsRems
  succ XCoreInsn
XcoreInsRems = XCoreInsn
XcoreInsRemu
  succ XCoreInsn
XcoreInsRemu = XCoreInsn
XcoreInsRetsp
  succ XCoreInsn
XcoreInsRetsp = XCoreInsn
XcoreInsSetclk
  succ XCoreInsn
XcoreInsSetclk = XCoreInsn
XcoreInsSet
  succ XCoreInsn
XcoreInsSet = XCoreInsn
XcoreInsSetc
  succ XCoreInsn
XcoreInsSetc = XCoreInsn
XcoreInsSetd
  succ XCoreInsn
XcoreInsSetd = XCoreInsn
XcoreInsSetev
  succ XCoreInsn
XcoreInsSetev = XCoreInsn
XcoreInsSetn
  succ XCoreInsn
XcoreInsSetn = XCoreInsn
XcoreInsSetpsc
  succ XCoreInsn
XcoreInsSetpsc = XCoreInsn
XcoreInsSetpt
  succ XCoreInsn
XcoreInsSetpt = XCoreInsn
XcoreInsSetrdy
  succ XCoreInsn
XcoreInsSetrdy = XCoreInsn
XcoreInsSetsr
  succ XCoreInsn
XcoreInsSetsr = XCoreInsn
XcoreInsSettw
  succ XCoreInsn
XcoreInsSettw = XCoreInsn
XcoreInsSetv
  succ XCoreInsn
XcoreInsSetv = XCoreInsn
XcoreInsSext
  succ XCoreInsn
XcoreInsSext = XCoreInsn
XcoreInsShl
  succ XCoreInsn
XcoreInsShl = XCoreInsn
XcoreInsShr
  succ XCoreInsn
XcoreInsShr = XCoreInsn
XcoreInsSsync
  succ XCoreInsn
XcoreInsSsync = XCoreInsn
XcoreInsSt16
  succ XCoreInsn
XcoreInsSt16 = XCoreInsn
XcoreInsSt8
  succ XCoreInsn
XcoreInsSt8 = XCoreInsn
XcoreInsStw
  succ XCoreInsn
XcoreInsStw = XCoreInsn
XcoreInsSub
  succ XCoreInsn
XcoreInsSub = XCoreInsn
XcoreInsSyncr
  succ XCoreInsn
XcoreInsSyncr = XCoreInsn
XcoreInsTestct
  succ XCoreInsn
XcoreInsTestct = XCoreInsn
XcoreInsTestlcl
  succ XCoreInsn
XcoreInsTestlcl = XCoreInsn
XcoreInsTestwct
  succ XCoreInsn
XcoreInsTestwct = XCoreInsn
XcoreInsTsetmr
  succ XCoreInsn
XcoreInsTsetmr = XCoreInsn
XcoreInsStart
  succ XCoreInsn
XcoreInsStart = XCoreInsn
XcoreInsWaitef
  succ XCoreInsn
XcoreInsWaitef = XCoreInsn
XcoreInsWaitet
  succ XCoreInsn
XcoreInsWaitet = XCoreInsn
XcoreInsWaiteu
  succ XCoreInsn
XcoreInsWaiteu = XCoreInsn
XcoreInsXor
  succ XCoreInsn
XcoreInsXor = XCoreInsn
XcoreInsZext
  succ XCoreInsn
XcoreInsZext = XCoreInsn
XcoreInsEnding
  succ XCoreInsn
XcoreInsEnding = String -> XCoreInsn
forall a. HasCallStack => String -> a
error String
"XCoreInsn.succ: XcoreInsEnding has no successor"

  pred :: XCoreInsn -> XCoreInsn
pred XCoreInsn
XcoreInsAdd = XCoreInsn
XcoreInsInvalid
  pred XCoreInsn
XcoreInsAndnot = XCoreInsn
XcoreInsAdd
  pred XCoreInsn
XcoreInsAnd = XCoreInsn
XcoreInsAndnot
  pred XCoreInsn
XcoreInsAshr = XCoreInsn
XcoreInsAnd
  pred XCoreInsn
XcoreInsBau = XCoreInsn
XcoreInsAshr
  pred XCoreInsn
XcoreInsBitrev = XCoreInsn
XcoreInsBau
  pred XCoreInsn
XcoreInsBla = XCoreInsn
XcoreInsBitrev
  pred XCoreInsn
XcoreInsBlat = XCoreInsn
XcoreInsBla
  pred XCoreInsn
XcoreInsBl = XCoreInsn
XcoreInsBlat
  pred XCoreInsn
XcoreInsBf = XCoreInsn
XcoreInsBl
  pred XCoreInsn
XcoreInsBt = XCoreInsn
XcoreInsBf
  pred XCoreInsn
XcoreInsBu = XCoreInsn
XcoreInsBt
  pred XCoreInsn
XcoreInsBru = XCoreInsn
XcoreInsBu
  pred XCoreInsn
XcoreInsByterev = XCoreInsn
XcoreInsBru
  pred XCoreInsn
XcoreInsChkct = XCoreInsn
XcoreInsByterev
  pred XCoreInsn
XcoreInsClre = XCoreInsn
XcoreInsChkct
  pred XCoreInsn
XcoreInsClrpt = XCoreInsn
XcoreInsClre
  pred XCoreInsn
XcoreInsClrsr = XCoreInsn
XcoreInsClrpt
  pred XCoreInsn
XcoreInsClz = XCoreInsn
XcoreInsClrsr
  pred XCoreInsn
XcoreInsCrc8 = XCoreInsn
XcoreInsClz
  pred XCoreInsn
XcoreInsCrc32 = XCoreInsn
XcoreInsCrc8
  pred XCoreInsn
XcoreInsDcall = XCoreInsn
XcoreInsCrc32
  pred XCoreInsn
XcoreInsDentsp = XCoreInsn
XcoreInsDcall
  pred XCoreInsn
XcoreInsDgetreg = XCoreInsn
XcoreInsDentsp
  pred XCoreInsn
XcoreInsDivs = XCoreInsn
XcoreInsDgetreg
  pred XCoreInsn
XcoreInsDivu = XCoreInsn
XcoreInsDivs
  pred XCoreInsn
XcoreInsDrestsp = XCoreInsn
XcoreInsDivu
  pred XCoreInsn
XcoreInsDret = XCoreInsn
XcoreInsDrestsp
  pred XCoreInsn
XcoreInsEcallf = XCoreInsn
XcoreInsDret
  pred XCoreInsn
XcoreInsEcallt = XCoreInsn
XcoreInsEcallf
  pred XCoreInsn
XcoreInsEdu = XCoreInsn
XcoreInsEcallt
  pred XCoreInsn
XcoreInsEef = XCoreInsn
XcoreInsEdu
  pred XCoreInsn
XcoreInsEet = XCoreInsn
XcoreInsEef
  pred XCoreInsn
XcoreInsEeu = XCoreInsn
XcoreInsEet
  pred XCoreInsn
XcoreInsEndin = XCoreInsn
XcoreInsEeu
  pred XCoreInsn
XcoreInsEntsp = XCoreInsn
XcoreInsEndin
  pred XCoreInsn
XcoreInsEq = XCoreInsn
XcoreInsEntsp
  pred XCoreInsn
XcoreInsExtdp = XCoreInsn
XcoreInsEq
  pred XCoreInsn
XcoreInsExtsp = XCoreInsn
XcoreInsExtdp
  pred XCoreInsn
XcoreInsFreer = XCoreInsn
XcoreInsExtsp
  pred XCoreInsn
XcoreInsFreet = XCoreInsn
XcoreInsFreer
  pred XCoreInsn
XcoreInsGetd = XCoreInsn
XcoreInsFreet
  pred XCoreInsn
XcoreInsGet = XCoreInsn
XcoreInsGetd
  pred XCoreInsn
XcoreInsGetn = XCoreInsn
XcoreInsGet
  pred XCoreInsn
XcoreInsGetr = XCoreInsn
XcoreInsGetn
  pred XCoreInsn
XcoreInsGetsr = XCoreInsn
XcoreInsGetr
  pred XCoreInsn
XcoreInsGetst = XCoreInsn
XcoreInsGetsr
  pred XCoreInsn
XcoreInsGetts = XCoreInsn
XcoreInsGetst
  pred XCoreInsn
XcoreInsInct = XCoreInsn
XcoreInsGetts
  pred XCoreInsn
XcoreInsInit = XCoreInsn
XcoreInsInct
  pred XCoreInsn
XcoreInsInpw = XCoreInsn
XcoreInsInit
  pred XCoreInsn
XcoreInsInshr = XCoreInsn
XcoreInsInpw
  pred XCoreInsn
XcoreInsInt = XCoreInsn
XcoreInsInshr
  pred XCoreInsn
XcoreInsIn = XCoreInsn
XcoreInsInt
  pred XCoreInsn
XcoreInsKcall = XCoreInsn
XcoreInsIn
  pred XCoreInsn
XcoreInsKentsp = XCoreInsn
XcoreInsKcall
  pred XCoreInsn
XcoreInsKrestsp = XCoreInsn
XcoreInsKentsp
  pred XCoreInsn
XcoreInsKret = XCoreInsn
XcoreInsKrestsp
  pred XCoreInsn
XcoreInsLadd = XCoreInsn
XcoreInsKret
  pred XCoreInsn
XcoreInsLd16s = XCoreInsn
XcoreInsLadd
  pred XCoreInsn
XcoreInsLd8u = XCoreInsn
XcoreInsLd16s
  pred XCoreInsn
XcoreInsLda16 = XCoreInsn
XcoreInsLd8u
  pred XCoreInsn
XcoreInsLdap = XCoreInsn
XcoreInsLda16
  pred XCoreInsn
XcoreInsLdaw = XCoreInsn
XcoreInsLdap
  pred XCoreInsn
XcoreInsLdc = XCoreInsn
XcoreInsLdaw
  pred XCoreInsn
XcoreInsLdw = XCoreInsn
XcoreInsLdc
  pred XCoreInsn
XcoreInsLdivu = XCoreInsn
XcoreInsLdw
  pred XCoreInsn
XcoreInsLmul = XCoreInsn
XcoreInsLdivu
  pred XCoreInsn
XcoreInsLss = XCoreInsn
XcoreInsLmul
  pred XCoreInsn
XcoreInsLsub = XCoreInsn
XcoreInsLss
  pred XCoreInsn
XcoreInsLsu = XCoreInsn
XcoreInsLsub
  pred XCoreInsn
XcoreInsMaccs = XCoreInsn
XcoreInsLsu
  pred XCoreInsn
XcoreInsMaccu = XCoreInsn
XcoreInsMaccs
  pred XCoreInsn
XcoreInsMjoin = XCoreInsn
XcoreInsMaccu
  pred XCoreInsn
XcoreInsMkmsk = XCoreInsn
XcoreInsMjoin
  pred XCoreInsn
XcoreInsMsync = XCoreInsn
XcoreInsMkmsk
  pred XCoreInsn
XcoreInsMul = XCoreInsn
XcoreInsMsync
  pred XCoreInsn
XcoreInsNeg = XCoreInsn
XcoreInsMul
  pred XCoreInsn
XcoreInsNot = XCoreInsn
XcoreInsNeg
  pred XCoreInsn
XcoreInsOr = XCoreInsn
XcoreInsNot
  pred XCoreInsn
XcoreInsOutct = XCoreInsn
XcoreInsOr
  pred XCoreInsn
XcoreInsOutpw = XCoreInsn
XcoreInsOutct
  pred XCoreInsn
XcoreInsOutshr = XCoreInsn
XcoreInsOutpw
  pred XCoreInsn
XcoreInsOutt = XCoreInsn
XcoreInsOutshr
  pred XCoreInsn
XcoreInsOut = XCoreInsn
XcoreInsOutt
  pred XCoreInsn
XcoreInsPeek = XCoreInsn
XcoreInsOut
  pred XCoreInsn
XcoreInsRems = XCoreInsn
XcoreInsPeek
  pred XCoreInsn
XcoreInsRemu = XCoreInsn
XcoreInsRems
  pred XCoreInsn
XcoreInsRetsp = XCoreInsn
XcoreInsRemu
  pred XCoreInsn
XcoreInsSetclk = XCoreInsn
XcoreInsRetsp
  pred XCoreInsn
XcoreInsSet = XCoreInsn
XcoreInsSetclk
  pred XCoreInsn
XcoreInsSetc = XCoreInsn
XcoreInsSet
  pred XCoreInsn
XcoreInsSetd = XCoreInsn
XcoreInsSetc
  pred XCoreInsn
XcoreInsSetev = XCoreInsn
XcoreInsSetd
  pred XCoreInsn
XcoreInsSetn = XCoreInsn
XcoreInsSetev
  pred XCoreInsn
XcoreInsSetpsc = XCoreInsn
XcoreInsSetn
  pred XCoreInsn
XcoreInsSetpt = XCoreInsn
XcoreInsSetpsc
  pred XCoreInsn
XcoreInsSetrdy = XCoreInsn
XcoreInsSetpt
  pred XCoreInsn
XcoreInsSetsr = XCoreInsn
XcoreInsSetrdy
  pred XCoreInsn
XcoreInsSettw = XCoreInsn
XcoreInsSetsr
  pred XCoreInsn
XcoreInsSetv = XCoreInsn
XcoreInsSettw
  pred XCoreInsn
XcoreInsSext = XCoreInsn
XcoreInsSetv
  pred XCoreInsn
XcoreInsShl = XCoreInsn
XcoreInsSext
  pred XCoreInsn
XcoreInsShr = XCoreInsn
XcoreInsShl
  pred XCoreInsn
XcoreInsSsync = XCoreInsn
XcoreInsShr
  pred XCoreInsn
XcoreInsSt16 = XCoreInsn
XcoreInsSsync
  pred XCoreInsn
XcoreInsSt8 = XCoreInsn
XcoreInsSt16
  pred XCoreInsn
XcoreInsStw = XCoreInsn
XcoreInsSt8
  pred XCoreInsn
XcoreInsSub = XCoreInsn
XcoreInsStw
  pred XCoreInsn
XcoreInsSyncr = XCoreInsn
XcoreInsSub
  pred XCoreInsn
XcoreInsTestct = XCoreInsn
XcoreInsSyncr
  pred XCoreInsn
XcoreInsTestlcl = XCoreInsn
XcoreInsTestct
  pred XCoreInsn
XcoreInsTestwct = XCoreInsn
XcoreInsTestlcl
  pred XCoreInsn
XcoreInsTsetmr = XCoreInsn
XcoreInsTestwct
  pred XCoreInsn
XcoreInsStart = XCoreInsn
XcoreInsTsetmr
  pred XCoreInsn
XcoreInsWaitef = XCoreInsn
XcoreInsStart
  pred XCoreInsn
XcoreInsWaitet = XCoreInsn
XcoreInsWaitef
  pred XCoreInsn
XcoreInsWaiteu = XCoreInsn
XcoreInsWaitet
  pred XCoreInsn
XcoreInsXor = XCoreInsn
XcoreInsWaiteu
  pred XCoreInsn
XcoreInsZext = XCoreInsn
XcoreInsXor
  pred XCoreInsn
XcoreInsEnding = XCoreInsn
XcoreInsZext
  pred XCoreInsn
XcoreInsInvalid = String -> XCoreInsn
forall a. HasCallStack => String -> a
error String
"XCoreInsn.pred: XcoreInsInvalid has no predecessor"

  enumFromTo :: XCoreInsn -> XCoreInsn -> [XCoreInsn]
enumFromTo XCoreInsn
from XCoreInsn
to = XCoreInsn -> [XCoreInsn]
forall t. Enum t => t -> [t]
go XCoreInsn
from
    where
      end :: Int
end = XCoreInsn -> Int
forall a. Enum a => a -> Int
fromEnum XCoreInsn
to
      go :: t -> [t]
go t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
                 Ordering
LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
                 Ordering
EQ -> [t
v]
                 Ordering
GT -> []

  enumFrom :: XCoreInsn -> [XCoreInsn]
enumFrom XCoreInsn
from = XCoreInsn -> XCoreInsn -> [XCoreInsn]
forall a. Enum a => a -> a -> [a]
enumFromTo XCoreInsn
from XCoreInsn
XcoreInsEnding

  fromEnum :: XCoreInsn -> Int
fromEnum XCoreInsn
XcoreInsInvalid = Int
0
  fromEnum XCoreInsn
XcoreInsAdd = Int
1
  fromEnum XCoreInsn
XcoreInsAndnot = Int
2
  fromEnum XCoreInsn
XcoreInsAnd = Int
3
  fromEnum XCoreInsn
XcoreInsAshr = Int
4
  fromEnum XCoreInsn
XcoreInsBau = Int
5
  fromEnum XCoreInsn
XcoreInsBitrev = Int
6
  fromEnum XCoreInsn
XcoreInsBla = Int
7
  fromEnum XCoreInsn
XcoreInsBlat = Int
8
  fromEnum XCoreInsn
XcoreInsBl = Int
9
  fromEnum XCoreInsn
XcoreInsBf = Int
10
  fromEnum XCoreInsn
XcoreInsBt = Int
11
  fromEnum XCoreInsn
XcoreInsBu = Int
12
  fromEnum XCoreInsn
XcoreInsBru = Int
13
  fromEnum XCoreInsn
XcoreInsByterev = Int
14
  fromEnum XCoreInsn
XcoreInsChkct = Int
15
  fromEnum XCoreInsn
XcoreInsClre = Int
16
  fromEnum XCoreInsn
XcoreInsClrpt = Int
17
  fromEnum XCoreInsn
XcoreInsClrsr = Int
18
  fromEnum XCoreInsn
XcoreInsClz = Int
19
  fromEnum XCoreInsn
XcoreInsCrc8 = Int
20
  fromEnum XCoreInsn
XcoreInsCrc32 = Int
21
  fromEnum XCoreInsn
XcoreInsDcall = Int
22
  fromEnum XCoreInsn
XcoreInsDentsp = Int
23
  fromEnum XCoreInsn
XcoreInsDgetreg = Int
24
  fromEnum XCoreInsn
XcoreInsDivs = Int
25
  fromEnum XCoreInsn
XcoreInsDivu = Int
26
  fromEnum XCoreInsn
XcoreInsDrestsp = Int
27
  fromEnum XCoreInsn
XcoreInsDret = Int
28
  fromEnum XCoreInsn
XcoreInsEcallf = Int
29
  fromEnum XCoreInsn
XcoreInsEcallt = Int
30
  fromEnum XCoreInsn
XcoreInsEdu = Int
31
  fromEnum XCoreInsn
XcoreInsEef = Int
32
  fromEnum XCoreInsn
XcoreInsEet = Int
33
  fromEnum XCoreInsn
XcoreInsEeu = Int
34
  fromEnum XCoreInsn
XcoreInsEndin = Int
35
  fromEnum XCoreInsn
XcoreInsEntsp = Int
36
  fromEnum XCoreInsn
XcoreInsEq = Int
37
  fromEnum XCoreInsn
XcoreInsExtdp = Int
38
  fromEnum XCoreInsn
XcoreInsExtsp = Int
39
  fromEnum XCoreInsn
XcoreInsFreer = Int
40
  fromEnum XCoreInsn
XcoreInsFreet = Int
41
  fromEnum XCoreInsn
XcoreInsGetd = Int
42
  fromEnum XCoreInsn
XcoreInsGet = Int
43
  fromEnum XCoreInsn
XcoreInsGetn = Int
44
  fromEnum XCoreInsn
XcoreInsGetr = Int
45
  fromEnum XCoreInsn
XcoreInsGetsr = Int
46
  fromEnum XCoreInsn
XcoreInsGetst = Int
47
  fromEnum XCoreInsn
XcoreInsGetts = Int
48
  fromEnum XCoreInsn
XcoreInsInct = Int
49
  fromEnum XCoreInsn
XcoreInsInit = Int
50
  fromEnum XCoreInsn
XcoreInsInpw = Int
51
  fromEnum XCoreInsn
XcoreInsInshr = Int
52
  fromEnum XCoreInsn
XcoreInsInt = Int
53
  fromEnum XCoreInsn
XcoreInsIn = Int
54
  fromEnum XCoreInsn
XcoreInsKcall = Int
55
  fromEnum XCoreInsn
XcoreInsKentsp = Int
56
  fromEnum XCoreInsn
XcoreInsKrestsp = Int
57
  fromEnum XCoreInsn
XcoreInsKret = Int
58
  fromEnum XCoreInsn
XcoreInsLadd = Int
59
  fromEnum XCoreInsn
XcoreInsLd16s = Int
60
  fromEnum XCoreInsn
XcoreInsLd8u = Int
61
  fromEnum XCoreInsn
XcoreInsLda16 = Int
62
  fromEnum XCoreInsn
XcoreInsLdap = Int
63
  fromEnum XCoreInsn
XcoreInsLdaw = Int
64
  fromEnum XCoreInsn
XcoreInsLdc = Int
65
  fromEnum XCoreInsn
XcoreInsLdw = Int
66
  fromEnum XCoreInsn
XcoreInsLdivu = Int
67
  fromEnum XCoreInsn
XcoreInsLmul = Int
68
  fromEnum XCoreInsn
XcoreInsLss = Int
69
  fromEnum XCoreInsn
XcoreInsLsub = Int
70
  fromEnum XCoreInsn
XcoreInsLsu = Int
71
  fromEnum XCoreInsn
XcoreInsMaccs = Int
72
  fromEnum XCoreInsn
XcoreInsMaccu = Int
73
  fromEnum XCoreInsn
XcoreInsMjoin = Int
74
  fromEnum XCoreInsn
XcoreInsMkmsk = Int
75
  fromEnum XCoreInsn
XcoreInsMsync = Int
76
  fromEnum XCoreInsn
XcoreInsMul = Int
77
  fromEnum XCoreInsn
XcoreInsNeg = Int
78
  fromEnum XCoreInsn
XcoreInsNot = Int
79
  fromEnum XCoreInsn
XcoreInsOr = Int
80
  fromEnum XCoreInsn
XcoreInsOutct = Int
81
  fromEnum XCoreInsn
XcoreInsOutpw = Int
82
  fromEnum XCoreInsn
XcoreInsOutshr = Int
83
  fromEnum XCoreInsn
XcoreInsOutt = Int
84
  fromEnum XCoreInsn
XcoreInsOut = Int
85
  fromEnum XCoreInsn
XcoreInsPeek = Int
86
  fromEnum XCoreInsn
XcoreInsRems = Int
87
  fromEnum XCoreInsn
XcoreInsRemu = Int
88
  fromEnum XCoreInsn
XcoreInsRetsp = Int
89
  fromEnum XCoreInsn
XcoreInsSetclk = Int
90
  fromEnum XCoreInsn
XcoreInsSet = Int
91
  fromEnum XCoreInsn
XcoreInsSetc = Int
92
  fromEnum XCoreInsn
XcoreInsSetd = Int
93
  fromEnum XCoreInsn
XcoreInsSetev = Int
94
  fromEnum XCoreInsn
XcoreInsSetn = Int
95
  fromEnum XCoreInsn
XcoreInsSetpsc = Int
96
  fromEnum XCoreInsn
XcoreInsSetpt = Int
97
  fromEnum XCoreInsn
XcoreInsSetrdy = Int
98
  fromEnum XCoreInsn
XcoreInsSetsr = Int
99
  fromEnum XCoreInsn
XcoreInsSettw = Int
100
  fromEnum XCoreInsn
XcoreInsSetv = Int
101
  fromEnum XCoreInsn
XcoreInsSext = Int
102
  fromEnum XCoreInsn
XcoreInsShl = Int
103
  fromEnum XCoreInsn
XcoreInsShr = Int
104
  fromEnum XCoreInsn
XcoreInsSsync = Int
105
  fromEnum XCoreInsn
XcoreInsSt16 = Int
106
  fromEnum XCoreInsn
XcoreInsSt8 = Int
107
  fromEnum XCoreInsn
XcoreInsStw = Int
108
  fromEnum XCoreInsn
XcoreInsSub = Int
109
  fromEnum XCoreInsn
XcoreInsSyncr = Int
110
  fromEnum XCoreInsn
XcoreInsTestct = Int
111
  fromEnum XCoreInsn
XcoreInsTestlcl = Int
112
  fromEnum XCoreInsn
XcoreInsTestwct = Int
113
  fromEnum XCoreInsn
XcoreInsTsetmr = Int
114
  fromEnum XCoreInsn
XcoreInsStart = Int
115
  fromEnum XCoreInsn
XcoreInsWaitef = Int
116
  fromEnum XCoreInsn
XcoreInsWaitet = Int
117
  fromEnum XCoreInsn
XcoreInsWaiteu = Int
118
  fromEnum XCoreInsn
XcoreInsXor = Int
119
  fromEnum XCoreInsn
XcoreInsZext = Int
120
  fromEnum XCoreInsn
XcoreInsEnding = Int
121

  toEnum :: Int -> XCoreInsn
toEnum Int
0 = XCoreInsn
XcoreInsInvalid
  toEnum Int
1 = XCoreInsn
XcoreInsAdd
  toEnum Int
2 = XCoreInsn
XcoreInsAndnot
  toEnum Int
3 = XCoreInsn
XcoreInsAnd
  toEnum Int
4 = XCoreInsn
XcoreInsAshr
  toEnum Int
5 = XCoreInsn
XcoreInsBau
  toEnum Int
6 = XCoreInsn
XcoreInsBitrev
  toEnum Int
7 = XCoreInsn
XcoreInsBla
  toEnum Int
8 = XCoreInsn
XcoreInsBlat
  toEnum Int
9 = XCoreInsn
XcoreInsBl
  toEnum Int
10 = XCoreInsn
XcoreInsBf
  toEnum Int
11 = XCoreInsn
XcoreInsBt
  toEnum Int
12 = XCoreInsn
XcoreInsBu
  toEnum Int
13 = XCoreInsn
XcoreInsBru
  toEnum Int
14 = XCoreInsn
XcoreInsByterev
  toEnum Int
15 = XCoreInsn
XcoreInsChkct
  toEnum Int
16 = XCoreInsn
XcoreInsClre
  toEnum Int
17 = XCoreInsn
XcoreInsClrpt
  toEnum Int
18 = XCoreInsn
XcoreInsClrsr
  toEnum Int
19 = XCoreInsn
XcoreInsClz
  toEnum Int
20 = XCoreInsn
XcoreInsCrc8
  toEnum Int
21 = XCoreInsn
XcoreInsCrc32
  toEnum Int
22 = XCoreInsn
XcoreInsDcall
  toEnum Int
23 = XCoreInsn
XcoreInsDentsp
  toEnum Int
24 = XCoreInsn
XcoreInsDgetreg
  toEnum Int
25 = XCoreInsn
XcoreInsDivs
  toEnum Int
26 = XCoreInsn
XcoreInsDivu
  toEnum Int
27 = XCoreInsn
XcoreInsDrestsp
  toEnum Int
28 = XCoreInsn
XcoreInsDret
  toEnum Int
29 = XCoreInsn
XcoreInsEcallf
  toEnum Int
30 = XCoreInsn
XcoreInsEcallt
  toEnum Int
31 = XCoreInsn
XcoreInsEdu
  toEnum Int
32 = XCoreInsn
XcoreInsEef
  toEnum Int
33 = XCoreInsn
XcoreInsEet
  toEnum Int
34 = XCoreInsn
XcoreInsEeu
  toEnum Int
35 = XCoreInsn
XcoreInsEndin
  toEnum Int
36 = XCoreInsn
XcoreInsEntsp
  toEnum Int
37 = XCoreInsn
XcoreInsEq
  toEnum Int
38 = XCoreInsn
XcoreInsExtdp
  toEnum Int
39 = XCoreInsn
XcoreInsExtsp
  toEnum Int
40 = XCoreInsn
XcoreInsFreer
  toEnum Int
41 = XCoreInsn
XcoreInsFreet
  toEnum Int
42 = XCoreInsn
XcoreInsGetd
  toEnum Int
43 = XCoreInsn
XcoreInsGet
  toEnum Int
44 = XCoreInsn
XcoreInsGetn
  toEnum Int
45 = XCoreInsn
XcoreInsGetr
  toEnum Int
46 = XCoreInsn
XcoreInsGetsr
  toEnum Int
47 = XCoreInsn
XcoreInsGetst
  toEnum Int
48 = XCoreInsn
XcoreInsGetts
  toEnum Int
49 = XCoreInsn
XcoreInsInct
  toEnum Int
50 = XCoreInsn
XcoreInsInit
  toEnum Int
51 = XCoreInsn
XcoreInsInpw
  toEnum Int
52 = XCoreInsn
XcoreInsInshr
  toEnum Int
53 = XCoreInsn
XcoreInsInt
  toEnum Int
54 = XCoreInsn
XcoreInsIn
  toEnum Int
55 = XCoreInsn
XcoreInsKcall
  toEnum Int
56 = XCoreInsn
XcoreInsKentsp
  toEnum Int
57 = XCoreInsn
XcoreInsKrestsp
  toEnum Int
58 = XCoreInsn
XcoreInsKret
  toEnum Int
59 = XCoreInsn
XcoreInsLadd
  toEnum Int
60 = XCoreInsn
XcoreInsLd16s
  toEnum Int
61 = XCoreInsn
XcoreInsLd8u
  toEnum Int
62 = XCoreInsn
XcoreInsLda16
  toEnum Int
63 = XCoreInsn
XcoreInsLdap
  toEnum Int
64 = XCoreInsn
XcoreInsLdaw
  toEnum Int
65 = XCoreInsn
XcoreInsLdc
  toEnum Int
66 = XCoreInsn
XcoreInsLdw
  toEnum Int
67 = XCoreInsn
XcoreInsLdivu
  toEnum Int
68 = XCoreInsn
XcoreInsLmul
  toEnum Int
69 = XCoreInsn
XcoreInsLss
  toEnum Int
70 = XCoreInsn
XcoreInsLsub
  toEnum Int
71 = XCoreInsn
XcoreInsLsu
  toEnum Int
72 = XCoreInsn
XcoreInsMaccs
  toEnum Int
73 = XCoreInsn
XcoreInsMaccu
  toEnum Int
74 = XCoreInsn
XcoreInsMjoin
  toEnum Int
75 = XCoreInsn
XcoreInsMkmsk
  toEnum Int
76 = XCoreInsn
XcoreInsMsync
  toEnum Int
77 = XCoreInsn
XcoreInsMul
  toEnum Int
78 = XCoreInsn
XcoreInsNeg
  toEnum Int
79 = XCoreInsn
XcoreInsNot
  toEnum Int
80 = XCoreInsn
XcoreInsOr
  toEnum Int
81 = XCoreInsn
XcoreInsOutct
  toEnum Int
82 = XCoreInsn
XcoreInsOutpw
  toEnum Int
83 = XCoreInsn
XcoreInsOutshr
  toEnum Int
84 = XCoreInsn
XcoreInsOutt
  toEnum Int
85 = XCoreInsn
XcoreInsOut
  toEnum Int
86 = XCoreInsn
XcoreInsPeek
  toEnum Int
87 = XCoreInsn
XcoreInsRems
  toEnum Int
88 = XCoreInsn
XcoreInsRemu
  toEnum Int
89 = XCoreInsn
XcoreInsRetsp
  toEnum Int
90 = XCoreInsn
XcoreInsSetclk
  toEnum Int
91 = XCoreInsn
XcoreInsSet
  toEnum Int
92 = XCoreInsn
XcoreInsSetc
  toEnum Int
93 = XCoreInsn
XcoreInsSetd
  toEnum Int
94 = XCoreInsn
XcoreInsSetev
  toEnum Int
95 = XCoreInsn
XcoreInsSetn
  toEnum Int
96 = XCoreInsn
XcoreInsSetpsc
  toEnum Int
97 = XCoreInsn
XcoreInsSetpt
  toEnum Int
98 = XCoreInsn
XcoreInsSetrdy
  toEnum Int
99 = XCoreInsn
XcoreInsSetsr
  toEnum Int
100 = XCoreInsn
XcoreInsSettw
  toEnum Int
101 = XCoreInsn
XcoreInsSetv
  toEnum Int
102 = XCoreInsn
XcoreInsSext
  toEnum Int
103 = XCoreInsn
XcoreInsShl
  toEnum Int
104 = XCoreInsn
XcoreInsShr
  toEnum Int
105 = XCoreInsn
XcoreInsSsync
  toEnum Int
106 = XCoreInsn
XcoreInsSt16
  toEnum Int
107 = XCoreInsn
XcoreInsSt8
  toEnum Int
108 = XCoreInsn
XcoreInsStw
  toEnum Int
109 = XCoreInsn
XcoreInsSub
  toEnum Int
110 = XCoreInsn
XcoreInsSyncr
  toEnum Int
111 = XCoreInsn
XcoreInsTestct
  toEnum Int
112 = XCoreInsn
XcoreInsTestlcl
  toEnum Int
113 = XCoreInsn
XcoreInsTestwct
  toEnum Int
114 = XCoreInsn
XcoreInsTsetmr
  toEnum Int
115 = XCoreInsn
XcoreInsStart
  toEnum Int
116 = XCoreInsn
XcoreInsWaitef
  toEnum Int
117 = XCoreInsn
XcoreInsWaitet
  toEnum Int
118 = XCoreInsn
XcoreInsWaiteu
  toEnum Int
119 = XCoreInsn
XcoreInsXor
  toEnum Int
120 = XCoreInsn
XcoreInsZext
  toEnum Int
121 = XCoreInsn
XcoreInsEnding
  toEnum Int
unmatched = String -> XCoreInsn
forall a. HasCallStack => String -> a
error (String
"XCoreInsn.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 113 "src/Hapstone/Internal/XCore.chs" #-}

-- | XCore instruction groups
data XCoreInsnGroup = XcoreGrpInvalid
                    | XcoreGrpJump
                    | XcoreGrpEnding
  deriving (Show,Eq,Bounded)
instance Enum XCoreInsnGroup where
  succ XcoreGrpInvalid = XcoreGrpJump
  succ XcoreGrpJump = XcoreGrpEnding
  succ XcoreGrpEnding = error "XCoreInsnGroup.succ: XcoreGrpEnding has no successor"

  pred XcoreGrpJump = XcoreGrpInvalid
  pred XcoreGrpEnding = XcoreGrpJump
  pred XcoreGrpInvalid = error "XCoreInsnGroup.pred: XcoreGrpInvalid 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 XcoreGrpEnding

  fromEnum XcoreGrpInvalid = 0
  fromEnum XcoreGrpJump = 1
  fromEnum XcoreGrpEnding = 2

  toEnum 0 = XcoreGrpInvalid
  toEnum 1 = XcoreGrpJump
  toEnum 2 = XcoreGrpEnding
  toEnum unmatched = error ("XCoreInsnGroup.toEnum: Cannot match " ++ show unmatched)

{-# LINE 116 "src/Hapstone/Internal/XCore.chs" #-}