module Hapstone.Internal.XCore where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Storable as C2HSImp
import Foreign
import Foreign.C.Types
data XCoreOpType = XcoreOpInvalid
| XcoreOpReg
| XcoreOpImm
| XcoreOpMem
deriving (Show,Eq,Bounded)
instance Enum XCoreOpType where
succ XcoreOpInvalid = XcoreOpReg
succ XcoreOpReg = XcoreOpImm
succ XcoreOpImm = XcoreOpMem
succ XcoreOpMem = error "XCoreOpType.succ: XcoreOpMem has no successor"
pred XcoreOpReg = XcoreOpInvalid
pred XcoreOpImm = XcoreOpReg
pred XcoreOpMem = XcoreOpImm
pred XcoreOpInvalid = error "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 XcoreOpInvalid = 0
fromEnum XcoreOpReg = 1
fromEnum XcoreOpImm = 2
fromEnum XcoreOpMem = 3
toEnum 0 = XcoreOpInvalid
toEnum 1 = XcoreOpReg
toEnum 2 = XcoreOpImm
toEnum 3 = XcoreOpMem
toEnum unmatched = error ("XCoreOpType.toEnum: Cannot match " ++ show unmatched)
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 XcoreRegCp = XcoreRegInvalid
pred XcoreRegDp = XcoreRegCp
pred XcoreRegLr = XcoreRegDp
pred XcoreRegSp = XcoreRegLr
pred XcoreRegR0 = XcoreRegSp
pred XcoreRegR1 = XcoreRegR0
pred XcoreRegR2 = 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 XcoreRegSsr = XcoreRegScp
pred XcoreRegEt = XcoreRegSsr
pred XcoreRegEd = XcoreRegEt
pred XcoreRegSed = XcoreRegEd
pred XcoreRegKep = XcoreRegSed
pred XcoreRegKsp = XcoreRegKep
pred XcoreRegId = XcoreRegKsp
pred XcoreRegEnding = XcoreRegId
pred XcoreRegInvalid = error "XCoreReg.pred: XcoreRegInvalid 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 XcoreRegEnding
fromEnum XcoreRegInvalid = 0
fromEnum XcoreRegCp = 1
fromEnum XcoreRegDp = 2
fromEnum XcoreRegLr = 3
fromEnum XcoreRegSp = 4
fromEnum XcoreRegR0 = 5
fromEnum XcoreRegR1 = 6
fromEnum XcoreRegR2 = 7
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 0 = XcoreRegInvalid
toEnum 1 = XcoreRegCp
toEnum 2 = XcoreRegDp
toEnum 3 = XcoreRegLr
toEnum 4 = XcoreRegSp
toEnum 5 = XcoreRegR0
toEnum 6 = XcoreRegR1
toEnum 7 = XcoreRegR2
toEnum 8 = XcoreRegR3
toEnum 9 = XcoreRegR4
toEnum 10 = XcoreRegR5
toEnum 11 = XcoreRegR6
toEnum 12 = XcoreRegR7
toEnum 13 = XcoreRegR8
toEnum 14 = XcoreRegR9
toEnum 15 = XcoreRegR10
toEnum 16 = XcoreRegR11
toEnum 17 = XcoreRegPc
toEnum 18 = XcoreRegScp
toEnum 19 = XcoreRegSsr
toEnum 20 = XcoreRegEt
toEnum 21 = XcoreRegEd
toEnum 22 = XcoreRegSed
toEnum 23 = XcoreRegKep
toEnum 24 = XcoreRegKsp
toEnum 25 = XcoreRegId
toEnum 26 = XcoreRegEnding
toEnum unmatched = error ("XCoreReg.toEnum: Cannot match " ++ show unmatched)
data XCoreOpMemStruct = XCoreOpMemStruct
{ base :: Word8
, index :: Word8
, disp :: Int32
, direct :: Int32
} deriving (Show, Eq)
instance Storable XCoreOpMemStruct where
sizeOf _ = 12
alignment _ = 4
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)
data CsXCoreOp
= Reg XCoreReg
| Imm Int32
| Mem XCoreOpMemStruct
| Undefined
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
newtype CsXCore = CsXCore [CsXCoreOp]
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
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 (Show,Eq,Bounded)
instance Enum XCoreInsn where
succ XcoreInsInvalid = XcoreInsAdd
succ XcoreInsAdd = XcoreInsAndnot
succ XcoreInsAndnot = XcoreInsAnd
succ XcoreInsAnd = XcoreInsAshr
succ XcoreInsAshr = XcoreInsBau
succ XcoreInsBau = XcoreInsBitrev
succ XcoreInsBitrev = XcoreInsBla
succ XcoreInsBla = XcoreInsBlat
succ XcoreInsBlat = XcoreInsBl
succ XcoreInsBl = XcoreInsBf
succ XcoreInsBf = XcoreInsBt
succ XcoreInsBt = XcoreInsBu
succ XcoreInsBu = XcoreInsBru
succ XcoreInsBru = XcoreInsByterev
succ XcoreInsByterev = XcoreInsChkct
succ XcoreInsChkct = XcoreInsClre
succ XcoreInsClre = XcoreInsClrpt
succ XcoreInsClrpt = XcoreInsClrsr
succ XcoreInsClrsr = XcoreInsClz
succ XcoreInsClz = XcoreInsCrc8
succ XcoreInsCrc8 = XcoreInsCrc32
succ XcoreInsCrc32 = XcoreInsDcall
succ XcoreInsDcall = XcoreInsDentsp
succ XcoreInsDentsp = XcoreInsDgetreg
succ XcoreInsDgetreg = XcoreInsDivs
succ XcoreInsDivs = XcoreInsDivu
succ XcoreInsDivu = XcoreInsDrestsp
succ XcoreInsDrestsp = XcoreInsDret
succ XcoreInsDret = XcoreInsEcallf
succ XcoreInsEcallf = XcoreInsEcallt
succ XcoreInsEcallt = XcoreInsEdu
succ XcoreInsEdu = XcoreInsEef
succ XcoreInsEef = XcoreInsEet
succ XcoreInsEet = XcoreInsEeu
succ XcoreInsEeu = XcoreInsEndin
succ XcoreInsEndin = XcoreInsEntsp
succ XcoreInsEntsp = XcoreInsEq
succ XcoreInsEq = XcoreInsExtdp
succ XcoreInsExtdp = XcoreInsExtsp
succ XcoreInsExtsp = XcoreInsFreer
succ XcoreInsFreer = XcoreInsFreet
succ XcoreInsFreet = XcoreInsGetd
succ XcoreInsGetd = XcoreInsGet
succ XcoreInsGet = XcoreInsGetn
succ XcoreInsGetn = XcoreInsGetr
succ XcoreInsGetr = XcoreInsGetsr
succ XcoreInsGetsr = XcoreInsGetst
succ XcoreInsGetst = XcoreInsGetts
succ XcoreInsGetts = XcoreInsInct
succ XcoreInsInct = XcoreInsInit
succ XcoreInsInit = XcoreInsInpw
succ XcoreInsInpw = XcoreInsInshr
succ XcoreInsInshr = XcoreInsInt
succ XcoreInsInt = XcoreInsIn
succ XcoreInsIn = XcoreInsKcall
succ XcoreInsKcall = XcoreInsKentsp
succ XcoreInsKentsp = XcoreInsKrestsp
succ XcoreInsKrestsp = XcoreInsKret
succ XcoreInsKret = XcoreInsLadd
succ XcoreInsLadd = XcoreInsLd16s
succ XcoreInsLd16s = XcoreInsLd8u
succ XcoreInsLd8u = XcoreInsLda16
succ XcoreInsLda16 = XcoreInsLdap
succ XcoreInsLdap = XcoreInsLdaw
succ XcoreInsLdaw = XcoreInsLdc
succ XcoreInsLdc = XcoreInsLdw
succ XcoreInsLdw = XcoreInsLdivu
succ XcoreInsLdivu = XcoreInsLmul
succ XcoreInsLmul = XcoreInsLss
succ XcoreInsLss = XcoreInsLsub
succ XcoreInsLsub = XcoreInsLsu
succ XcoreInsLsu = XcoreInsMaccs
succ XcoreInsMaccs = XcoreInsMaccu
succ XcoreInsMaccu = XcoreInsMjoin
succ XcoreInsMjoin = XcoreInsMkmsk
succ XcoreInsMkmsk = XcoreInsMsync
succ XcoreInsMsync = XcoreInsMul
succ XcoreInsMul = XcoreInsNeg
succ XcoreInsNeg = XcoreInsNot
succ XcoreInsNot = XcoreInsOr
succ XcoreInsOr = XcoreInsOutct
succ XcoreInsOutct = XcoreInsOutpw
succ XcoreInsOutpw = XcoreInsOutshr
succ XcoreInsOutshr = XcoreInsOutt
succ XcoreInsOutt = XcoreInsOut
succ XcoreInsOut = XcoreInsPeek
succ XcoreInsPeek = XcoreInsRems
succ XcoreInsRems = XcoreInsRemu
succ XcoreInsRemu = XcoreInsRetsp
succ XcoreInsRetsp = XcoreInsSetclk
succ XcoreInsSetclk = XcoreInsSet
succ XcoreInsSet = XcoreInsSetc
succ XcoreInsSetc = XcoreInsSetd
succ XcoreInsSetd = XcoreInsSetev
succ XcoreInsSetev = XcoreInsSetn
succ XcoreInsSetn = XcoreInsSetpsc
succ XcoreInsSetpsc = XcoreInsSetpt
succ XcoreInsSetpt = XcoreInsSetrdy
succ XcoreInsSetrdy = XcoreInsSetsr
succ XcoreInsSetsr = XcoreInsSettw
succ XcoreInsSettw = XcoreInsSetv
succ XcoreInsSetv = XcoreInsSext
succ XcoreInsSext = XcoreInsShl
succ XcoreInsShl = XcoreInsShr
succ XcoreInsShr = XcoreInsSsync
succ XcoreInsSsync = XcoreInsSt16
succ XcoreInsSt16 = XcoreInsSt8
succ XcoreInsSt8 = XcoreInsStw
succ XcoreInsStw = XcoreInsSub
succ XcoreInsSub = XcoreInsSyncr
succ XcoreInsSyncr = XcoreInsTestct
succ XcoreInsTestct = XcoreInsTestlcl
succ XcoreInsTestlcl = XcoreInsTestwct
succ XcoreInsTestwct = XcoreInsTsetmr
succ XcoreInsTsetmr = XcoreInsStart
succ XcoreInsStart = XcoreInsWaitef
succ XcoreInsWaitef = XcoreInsWaitet
succ XcoreInsWaitet = XcoreInsWaiteu
succ XcoreInsWaiteu = XcoreInsXor
succ XcoreInsXor = XcoreInsZext
succ XcoreInsZext = XcoreInsEnding
succ XcoreInsEnding = error "XCoreInsn.succ: XcoreInsEnding has no successor"
pred XcoreInsAdd = XcoreInsInvalid
pred XcoreInsAndnot = XcoreInsAdd
pred XcoreInsAnd = XcoreInsAndnot
pred XcoreInsAshr = XcoreInsAnd
pred XcoreInsBau = XcoreInsAshr
pred XcoreInsBitrev = XcoreInsBau
pred XcoreInsBla = XcoreInsBitrev
pred XcoreInsBlat = XcoreInsBla
pred XcoreInsBl = XcoreInsBlat
pred XcoreInsBf = XcoreInsBl
pred XcoreInsBt = XcoreInsBf
pred XcoreInsBu = XcoreInsBt
pred XcoreInsBru = XcoreInsBu
pred XcoreInsByterev = XcoreInsBru
pred XcoreInsChkct = XcoreInsByterev
pred XcoreInsClre = XcoreInsChkct
pred XcoreInsClrpt = XcoreInsClre
pred XcoreInsClrsr = XcoreInsClrpt
pred XcoreInsClz = XcoreInsClrsr
pred XcoreInsCrc8 = XcoreInsClz
pred XcoreInsCrc32 = XcoreInsCrc8
pred XcoreInsDcall = XcoreInsCrc32
pred XcoreInsDentsp = XcoreInsDcall
pred XcoreInsDgetreg = XcoreInsDentsp
pred XcoreInsDivs = XcoreInsDgetreg
pred XcoreInsDivu = XcoreInsDivs
pred XcoreInsDrestsp = XcoreInsDivu
pred XcoreInsDret = XcoreInsDrestsp
pred XcoreInsEcallf = XcoreInsDret
pred XcoreInsEcallt = XcoreInsEcallf
pred XcoreInsEdu = XcoreInsEcallt
pred XcoreInsEef = XcoreInsEdu
pred XcoreInsEet = XcoreInsEef
pred XcoreInsEeu = XcoreInsEet
pred XcoreInsEndin = XcoreInsEeu
pred XcoreInsEntsp = XcoreInsEndin
pred XcoreInsEq = XcoreInsEntsp
pred XcoreInsExtdp = XcoreInsEq
pred XcoreInsExtsp = XcoreInsExtdp
pred XcoreInsFreer = XcoreInsExtsp
pred XcoreInsFreet = XcoreInsFreer
pred XcoreInsGetd = XcoreInsFreet
pred XcoreInsGet = XcoreInsGetd
pred XcoreInsGetn = XcoreInsGet
pred XcoreInsGetr = XcoreInsGetn
pred XcoreInsGetsr = XcoreInsGetr
pred XcoreInsGetst = XcoreInsGetsr
pred XcoreInsGetts = XcoreInsGetst
pred XcoreInsInct = XcoreInsGetts
pred XcoreInsInit = XcoreInsInct
pred XcoreInsInpw = XcoreInsInit
pred XcoreInsInshr = XcoreInsInpw
pred XcoreInsInt = XcoreInsInshr
pred XcoreInsIn = XcoreInsInt
pred XcoreInsKcall = XcoreInsIn
pred XcoreInsKentsp = XcoreInsKcall
pred XcoreInsKrestsp = XcoreInsKentsp
pred XcoreInsKret = XcoreInsKrestsp
pred XcoreInsLadd = XcoreInsKret
pred XcoreInsLd16s = XcoreInsLadd
pred XcoreInsLd8u = XcoreInsLd16s
pred XcoreInsLda16 = XcoreInsLd8u
pred XcoreInsLdap = XcoreInsLda16
pred XcoreInsLdaw = XcoreInsLdap
pred XcoreInsLdc = XcoreInsLdaw
pred XcoreInsLdw = XcoreInsLdc
pred XcoreInsLdivu = XcoreInsLdw
pred XcoreInsLmul = XcoreInsLdivu
pred XcoreInsLss = XcoreInsLmul
pred XcoreInsLsub = XcoreInsLss
pred XcoreInsLsu = XcoreInsLsub
pred XcoreInsMaccs = XcoreInsLsu
pred XcoreInsMaccu = XcoreInsMaccs
pred XcoreInsMjoin = XcoreInsMaccu
pred XcoreInsMkmsk = XcoreInsMjoin
pred XcoreInsMsync = XcoreInsMkmsk
pred XcoreInsMul = XcoreInsMsync
pred XcoreInsNeg = XcoreInsMul
pred XcoreInsNot = XcoreInsNeg
pred XcoreInsOr = XcoreInsNot
pred XcoreInsOutct = XcoreInsOr
pred XcoreInsOutpw = XcoreInsOutct
pred XcoreInsOutshr = XcoreInsOutpw
pred XcoreInsOutt = XcoreInsOutshr
pred XcoreInsOut = XcoreInsOutt
pred XcoreInsPeek = XcoreInsOut
pred XcoreInsRems = XcoreInsPeek
pred XcoreInsRemu = XcoreInsRems
pred XcoreInsRetsp = XcoreInsRemu
pred XcoreInsSetclk = XcoreInsRetsp
pred XcoreInsSet = XcoreInsSetclk
pred XcoreInsSetc = XcoreInsSet
pred XcoreInsSetd = XcoreInsSetc
pred XcoreInsSetev = XcoreInsSetd
pred XcoreInsSetn = XcoreInsSetev
pred XcoreInsSetpsc = XcoreInsSetn
pred XcoreInsSetpt = XcoreInsSetpsc
pred XcoreInsSetrdy = XcoreInsSetpt
pred XcoreInsSetsr = XcoreInsSetrdy
pred XcoreInsSettw = XcoreInsSetsr
pred XcoreInsSetv = XcoreInsSettw
pred XcoreInsSext = XcoreInsSetv
pred XcoreInsShl = XcoreInsSext
pred XcoreInsShr = XcoreInsShl
pred XcoreInsSsync = XcoreInsShr
pred XcoreInsSt16 = XcoreInsSsync
pred XcoreInsSt8 = XcoreInsSt16
pred XcoreInsStw = XcoreInsSt8
pred XcoreInsSub = XcoreInsStw
pred XcoreInsSyncr = XcoreInsSub
pred XcoreInsTestct = XcoreInsSyncr
pred XcoreInsTestlcl = XcoreInsTestct
pred XcoreInsTestwct = XcoreInsTestlcl
pred XcoreInsTsetmr = XcoreInsTestwct
pred XcoreInsStart = XcoreInsTsetmr
pred XcoreInsWaitef = XcoreInsStart
pred XcoreInsWaitet = XcoreInsWaitef
pred XcoreInsWaiteu = XcoreInsWaitet
pred XcoreInsXor = XcoreInsWaiteu
pred XcoreInsZext = XcoreInsXor
pred XcoreInsEnding = XcoreInsZext
pred XcoreInsInvalid = error "XCoreInsn.pred: XcoreInsInvalid 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 XcoreInsEnding
fromEnum XcoreInsInvalid = 0
fromEnum XcoreInsAdd = 1
fromEnum XcoreInsAndnot = 2
fromEnum XcoreInsAnd = 3
fromEnum XcoreInsAshr = 4
fromEnum XcoreInsBau = 5
fromEnum XcoreInsBitrev = 6
fromEnum XcoreInsBla = 7
fromEnum XcoreInsBlat = 8
fromEnum XcoreInsBl = 9
fromEnum XcoreInsBf = 10
fromEnum XcoreInsBt = 11
fromEnum XcoreInsBu = 12
fromEnum XcoreInsBru = 13
fromEnum XcoreInsByterev = 14
fromEnum XcoreInsChkct = 15
fromEnum XcoreInsClre = 16
fromEnum XcoreInsClrpt = 17
fromEnum XcoreInsClrsr = 18
fromEnum XcoreInsClz = 19
fromEnum XcoreInsCrc8 = 20
fromEnum XcoreInsCrc32 = 21
fromEnum XcoreInsDcall = 22
fromEnum XcoreInsDentsp = 23
fromEnum XcoreInsDgetreg = 24
fromEnum XcoreInsDivs = 25
fromEnum XcoreInsDivu = 26
fromEnum XcoreInsDrestsp = 27
fromEnum XcoreInsDret = 28
fromEnum XcoreInsEcallf = 29
fromEnum XcoreInsEcallt = 30
fromEnum XcoreInsEdu = 31
fromEnum XcoreInsEef = 32
fromEnum XcoreInsEet = 33
fromEnum XcoreInsEeu = 34
fromEnum XcoreInsEndin = 35
fromEnum XcoreInsEntsp = 36
fromEnum XcoreInsEq = 37
fromEnum XcoreInsExtdp = 38
fromEnum XcoreInsExtsp = 39
fromEnum XcoreInsFreer = 40
fromEnum XcoreInsFreet = 41
fromEnum XcoreInsGetd = 42
fromEnum XcoreInsGet = 43
fromEnum XcoreInsGetn = 44
fromEnum XcoreInsGetr = 45
fromEnum XcoreInsGetsr = 46
fromEnum XcoreInsGetst = 47
fromEnum XcoreInsGetts = 48
fromEnum XcoreInsInct = 49
fromEnum XcoreInsInit = 50
fromEnum XcoreInsInpw = 51
fromEnum XcoreInsInshr = 52
fromEnum XcoreInsInt = 53
fromEnum XcoreInsIn = 54
fromEnum XcoreInsKcall = 55
fromEnum XcoreInsKentsp = 56
fromEnum XcoreInsKrestsp = 57
fromEnum XcoreInsKret = 58
fromEnum XcoreInsLadd = 59
fromEnum XcoreInsLd16s = 60
fromEnum XcoreInsLd8u = 61
fromEnum XcoreInsLda16 = 62
fromEnum XcoreInsLdap = 63
fromEnum XcoreInsLdaw = 64
fromEnum XcoreInsLdc = 65
fromEnum XcoreInsLdw = 66
fromEnum XcoreInsLdivu = 67
fromEnum XcoreInsLmul = 68
fromEnum XcoreInsLss = 69
fromEnum XcoreInsLsub = 70
fromEnum XcoreInsLsu = 71
fromEnum XcoreInsMaccs = 72
fromEnum XcoreInsMaccu = 73
fromEnum XcoreInsMjoin = 74
fromEnum XcoreInsMkmsk = 75
fromEnum XcoreInsMsync = 76
fromEnum XcoreInsMul = 77
fromEnum XcoreInsNeg = 78
fromEnum XcoreInsNot = 79
fromEnum XcoreInsOr = 80
fromEnum XcoreInsOutct = 81
fromEnum XcoreInsOutpw = 82
fromEnum XcoreInsOutshr = 83
fromEnum XcoreInsOutt = 84
fromEnum XcoreInsOut = 85
fromEnum XcoreInsPeek = 86
fromEnum XcoreInsRems = 87
fromEnum XcoreInsRemu = 88
fromEnum XcoreInsRetsp = 89
fromEnum XcoreInsSetclk = 90
fromEnum XcoreInsSet = 91
fromEnum XcoreInsSetc = 92
fromEnum XcoreInsSetd = 93
fromEnum XcoreInsSetev = 94
fromEnum XcoreInsSetn = 95
fromEnum XcoreInsSetpsc = 96
fromEnum XcoreInsSetpt = 97
fromEnum XcoreInsSetrdy = 98
fromEnum XcoreInsSetsr = 99
fromEnum XcoreInsSettw = 100
fromEnum XcoreInsSetv = 101
fromEnum XcoreInsSext = 102
fromEnum XcoreInsShl = 103
fromEnum XcoreInsShr = 104
fromEnum XcoreInsSsync = 105
fromEnum XcoreInsSt16 = 106
fromEnum XcoreInsSt8 = 107
fromEnum XcoreInsStw = 108
fromEnum XcoreInsSub = 109
fromEnum XcoreInsSyncr = 110
fromEnum XcoreInsTestct = 111
fromEnum XcoreInsTestlcl = 112
fromEnum XcoreInsTestwct = 113
fromEnum XcoreInsTsetmr = 114
fromEnum XcoreInsStart = 115
fromEnum XcoreInsWaitef = 116
fromEnum XcoreInsWaitet = 117
fromEnum XcoreInsWaiteu = 118
fromEnum XcoreInsXor = 119
fromEnum XcoreInsZext = 120
fromEnum XcoreInsEnding = 121
toEnum 0 = XcoreInsInvalid
toEnum 1 = XcoreInsAdd
toEnum 2 = XcoreInsAndnot
toEnum 3 = XcoreInsAnd
toEnum 4 = XcoreInsAshr
toEnum 5 = XcoreInsBau
toEnum 6 = XcoreInsBitrev
toEnum 7 = XcoreInsBla
toEnum 8 = XcoreInsBlat
toEnum 9 = XcoreInsBl
toEnum 10 = XcoreInsBf
toEnum 11 = XcoreInsBt
toEnum 12 = XcoreInsBu
toEnum 13 = XcoreInsBru
toEnum 14 = XcoreInsByterev
toEnum 15 = XcoreInsChkct
toEnum 16 = XcoreInsClre
toEnum 17 = XcoreInsClrpt
toEnum 18 = XcoreInsClrsr
toEnum 19 = XcoreInsClz
toEnum 20 = XcoreInsCrc8
toEnum 21 = XcoreInsCrc32
toEnum 22 = XcoreInsDcall
toEnum 23 = XcoreInsDentsp
toEnum 24 = XcoreInsDgetreg
toEnum 25 = XcoreInsDivs
toEnum 26 = XcoreInsDivu
toEnum 27 = XcoreInsDrestsp
toEnum 28 = XcoreInsDret
toEnum 29 = XcoreInsEcallf
toEnum 30 = XcoreInsEcallt
toEnum 31 = XcoreInsEdu
toEnum 32 = XcoreInsEef
toEnum 33 = XcoreInsEet
toEnum 34 = XcoreInsEeu
toEnum 35 = XcoreInsEndin
toEnum 36 = XcoreInsEntsp
toEnum 37 = XcoreInsEq
toEnum 38 = XcoreInsExtdp
toEnum 39 = XcoreInsExtsp
toEnum 40 = XcoreInsFreer
toEnum 41 = XcoreInsFreet
toEnum 42 = XcoreInsGetd
toEnum 43 = XcoreInsGet
toEnum 44 = XcoreInsGetn
toEnum 45 = XcoreInsGetr
toEnum 46 = XcoreInsGetsr
toEnum 47 = XcoreInsGetst
toEnum 48 = XcoreInsGetts
toEnum 49 = XcoreInsInct
toEnum 50 = XcoreInsInit
toEnum 51 = XcoreInsInpw
toEnum 52 = XcoreInsInshr
toEnum 53 = XcoreInsInt
toEnum 54 = XcoreInsIn
toEnum 55 = XcoreInsKcall
toEnum 56 = XcoreInsKentsp
toEnum 57 = XcoreInsKrestsp
toEnum 58 = XcoreInsKret
toEnum 59 = XcoreInsLadd
toEnum 60 = XcoreInsLd16s
toEnum 61 = XcoreInsLd8u
toEnum 62 = XcoreInsLda16
toEnum 63 = XcoreInsLdap
toEnum 64 = XcoreInsLdaw
toEnum 65 = XcoreInsLdc
toEnum 66 = XcoreInsLdw
toEnum 67 = XcoreInsLdivu
toEnum 68 = XcoreInsLmul
toEnum 69 = XcoreInsLss
toEnum 70 = XcoreInsLsub
toEnum 71 = XcoreInsLsu
toEnum 72 = XcoreInsMaccs
toEnum 73 = XcoreInsMaccu
toEnum 74 = XcoreInsMjoin
toEnum 75 = XcoreInsMkmsk
toEnum 76 = XcoreInsMsync
toEnum 77 = XcoreInsMul
toEnum 78 = XcoreInsNeg
toEnum 79 = XcoreInsNot
toEnum 80 = XcoreInsOr
toEnum 81 = XcoreInsOutct
toEnum 82 = XcoreInsOutpw
toEnum 83 = XcoreInsOutshr
toEnum 84 = XcoreInsOutt
toEnum 85 = XcoreInsOut
toEnum 86 = XcoreInsPeek
toEnum 87 = XcoreInsRems
toEnum 88 = XcoreInsRemu
toEnum 89 = XcoreInsRetsp
toEnum 90 = XcoreInsSetclk
toEnum 91 = XcoreInsSet
toEnum 92 = XcoreInsSetc
toEnum 93 = XcoreInsSetd
toEnum 94 = XcoreInsSetev
toEnum 95 = XcoreInsSetn
toEnum 96 = XcoreInsSetpsc
toEnum 97 = XcoreInsSetpt
toEnum 98 = XcoreInsSetrdy
toEnum 99 = XcoreInsSetsr
toEnum 100 = XcoreInsSettw
toEnum 101 = XcoreInsSetv
toEnum 102 = XcoreInsSext
toEnum 103 = XcoreInsShl
toEnum 104 = XcoreInsShr
toEnum 105 = XcoreInsSsync
toEnum 106 = XcoreInsSt16
toEnum 107 = XcoreInsSt8
toEnum 108 = XcoreInsStw
toEnum 109 = XcoreInsSub
toEnum 110 = XcoreInsSyncr
toEnum 111 = XcoreInsTestct
toEnum 112 = XcoreInsTestlcl
toEnum 113 = XcoreInsTestwct
toEnum 114 = XcoreInsTsetmr
toEnum 115 = XcoreInsStart
toEnum 116 = XcoreInsWaitef
toEnum 117 = XcoreInsWaitet
toEnum 118 = XcoreInsWaiteu
toEnum 119 = XcoreInsXor
toEnum 120 = XcoreInsZext
toEnum 121 = XcoreInsEnding
toEnum unmatched = error ("XCoreInsn.toEnum: Cannot match " ++ show unmatched)
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)