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






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


import Foreign
import Foreign.C.Types

-- | ARM shift type
data ArmShifter = ArmSftInvalid
                | ArmSftAsr
                | ArmSftLsl
                | ArmSftLsr
                | ArmSftRor
                | ArmSftRrx
                | ArmSftAsrReg
                | ArmSftLslReg
                | ArmSftLsrReg
                | ArmSftRorReg
                | ArmSftRrxReg
  deriving (Show,Eq,Bounded)
instance Enum ArmShifter where
  succ ArmSftInvalid = ArmSftAsr
  succ ArmSftAsr = ArmSftLsl
  succ ArmSftLsl = ArmSftLsr
  succ ArmSftLsr = ArmSftRor
  succ ArmSftRor = ArmSftRrx
  succ ArmSftRrx = ArmSftAsrReg
  succ ArmSftAsrReg = ArmSftLslReg
  succ ArmSftLslReg = ArmSftLsrReg
  succ ArmSftLsrReg = ArmSftRorReg
  succ ArmSftRorReg = ArmSftRrxReg
  succ ArmSftRrxReg = error "ArmShifter.succ: ArmSftRrxReg has no successor"

  pred ArmSftAsr = ArmSftInvalid
  pred ArmSftLsl = ArmSftAsr
  pred ArmSftLsr = ArmSftLsl
  pred ArmSftRor = ArmSftLsr
  pred ArmSftRrx = ArmSftRor
  pred ArmSftAsrReg = ArmSftRrx
  pred ArmSftLslReg = ArmSftAsrReg
  pred ArmSftLsrReg = ArmSftLslReg
  pred ArmSftRorReg = ArmSftLsrReg
  pred ArmSftRrxReg = ArmSftRorReg
  pred ArmSftInvalid = error "ArmShifter.pred: ArmSftInvalid 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 ArmSftRrxReg

  fromEnum ArmSftInvalid = 0
  fromEnum ArmSftAsr = 1
  fromEnum ArmSftLsl = 2
  fromEnum ArmSftLsr = 3
  fromEnum ArmSftRor = 4
  fromEnum ArmSftRrx = 5
  fromEnum ArmSftAsrReg = 6
  fromEnum ArmSftLslReg = 7
  fromEnum ArmSftLsrReg = 8
  fromEnum ArmSftRorReg = 9
  fromEnum ArmSftRrxReg = 10

  toEnum 0 = ArmSftInvalid
  toEnum 1 = ArmSftAsr
  toEnum 2 = ArmSftLsl
  toEnum 3 = ArmSftLsr
  toEnum 4 = ArmSftRor
  toEnum 5 = ArmSftRrx
  toEnum 6 = ArmSftAsrReg
  toEnum 7 = ArmSftLslReg
  toEnum 8 = ArmSftLsrReg
  toEnum 9 = ArmSftRorReg
  toEnum 10 = ArmSftRrxReg
  toEnum unmatched = error ("ArmShifter.toEnum: Cannot match " ++ show unmatched)

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

-- | ARM condition code
data ArmConditionCode = ArmCcInvalid
                      | ArmCcEq
                      | ArmCcNe
                      | ArmCcHs
                      | ArmCcLo
                      | ArmCcMi
                      | ArmCcPl
                      | ArmCcVs
                      | ArmCcVc
                      | ArmCcHi
                      | ArmCcLs
                      | ArmCcGe
                      | ArmCcLt
                      | ArmCcGt
                      | ArmCcLe
                      | ArmCcAl
  deriving (Show,Eq,Bounded)
instance Enum ArmConditionCode where
  succ ArmCcInvalid = ArmCcEq
  succ ArmCcEq = ArmCcNe
  succ ArmCcNe = ArmCcHs
  succ ArmCcHs = ArmCcLo
  succ ArmCcLo = ArmCcMi
  succ ArmCcMi = ArmCcPl
  succ ArmCcPl = ArmCcVs
  succ ArmCcVs = ArmCcVc
  succ ArmCcVc = ArmCcHi
  succ ArmCcHi = ArmCcLs
  succ ArmCcLs = ArmCcGe
  succ ArmCcGe = ArmCcLt
  succ ArmCcLt = ArmCcGt
  succ ArmCcGt = ArmCcLe
  succ ArmCcLe = ArmCcAl
  succ ArmCcAl = error "ArmConditionCode.succ: ArmCcAl has no successor"

  pred ArmCcEq = ArmCcInvalid
  pred ArmCcNe = ArmCcEq
  pred ArmCcHs = ArmCcNe
  pred ArmCcLo = ArmCcHs
  pred ArmCcMi = ArmCcLo
  pred ArmCcPl = ArmCcMi
  pred ArmCcVs = ArmCcPl
  pred ArmCcVc = ArmCcVs
  pred ArmCcHi = ArmCcVc
  pred ArmCcLs = ArmCcHi
  pred ArmCcGe = ArmCcLs
  pred ArmCcLt = ArmCcGe
  pred ArmCcGt = ArmCcLt
  pred ArmCcLe = ArmCcGt
  pred ArmCcAl = ArmCcLe
  pred ArmCcInvalid = error "ArmConditionCode.pred: ArmCcInvalid 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 ArmCcAl

  fromEnum ArmCcInvalid = 0
  fromEnum ArmCcEq = 1
  fromEnum ArmCcNe = 2
  fromEnum ArmCcHs = 3
  fromEnum ArmCcLo = 4
  fromEnum ArmCcMi = 5
  fromEnum ArmCcPl = 6
  fromEnum ArmCcVs = 7
  fromEnum ArmCcVc = 8
  fromEnum ArmCcHi = 9
  fromEnum ArmCcLs = 10
  fromEnum ArmCcGe = 11
  fromEnum ArmCcLt = 12
  fromEnum ArmCcGt = 13
  fromEnum ArmCcLe = 14
  fromEnum ArmCcAl = 15

  toEnum 0 = ArmCcInvalid
  toEnum 1 = ArmCcEq
  toEnum 2 = ArmCcNe
  toEnum 3 = ArmCcHs
  toEnum 4 = ArmCcLo
  toEnum 5 = ArmCcMi
  toEnum 6 = ArmCcPl
  toEnum 7 = ArmCcVs
  toEnum 8 = ArmCcVc
  toEnum 9 = ArmCcHi
  toEnum 10 = ArmCcLs
  toEnum 11 = ArmCcGe
  toEnum 12 = ArmCcLt
  toEnum 13 = ArmCcGt
  toEnum 14 = ArmCcLe
  toEnum 15 = ArmCcAl
  toEnum unmatched = error ("ArmConditionCode.toEnum: Cannot match " ++ show unmatched)

{-# LINE 35 "src/Hapstone/Internal/Arm.chs" #-}

-- | system registers
data ArmSysreg = ArmSysregInvalid
               | ArmSysregSpsrC
               | ArmSysregSpsrX
               | ArmSysregSpsrS
               | ArmSysregSpsrF
               | ArmSysregCpsrC
               | ArmSysregCpsrX
               | ArmSysregCpsrS
               | ArmSysregCpsrF
               | ArmSysregApsr
               | ArmSysregApsrG
               | ArmSysregApsrNzcvq
               | ArmSysregApsrNzcvqg
               | ArmSysregIapsr
               | ArmSysregIapsrG
               | ArmSysregIapsrNzcvqg
               | ArmSysregEapsr
               | ArmSysregEapsrG
               | ArmSysregEapsrNzcvqg
               | ArmSysregXpsr
               | ArmSysregXpsrG
               | ArmSysregXpsrNzcvqg
               | ArmSysregIpsr
               | ArmSysregEpsr
               | ArmSysregIepsr
               | ArmSysregMsp
               | ArmSysregPsp
               | ArmSysregPrimask
               | ArmSysregBasepri
               | ArmSysregBasepriMax
               | ArmSysregFaultmask
               | ArmSysregControl
  deriving (Show,Eq,Bounded)
instance Enum ArmSysreg where
  succ ArmSysregInvalid = ArmSysregSpsrC
  succ ArmSysregSpsrC = ArmSysregSpsrX
  succ ArmSysregSpsrX = ArmSysregSpsrS
  succ ArmSysregSpsrS = ArmSysregSpsrF
  succ ArmSysregSpsrF = ArmSysregCpsrC
  succ ArmSysregCpsrC = ArmSysregCpsrX
  succ ArmSysregCpsrX = ArmSysregCpsrS
  succ ArmSysregCpsrS = ArmSysregCpsrF
  succ ArmSysregCpsrF = ArmSysregApsr
  succ ArmSysregApsr = ArmSysregApsrG
  succ ArmSysregApsrG = ArmSysregApsrNzcvq
  succ ArmSysregApsrNzcvq = ArmSysregApsrNzcvqg
  succ ArmSysregApsrNzcvqg = ArmSysregIapsr
  succ ArmSysregIapsr = ArmSysregIapsrG
  succ ArmSysregIapsrG = ArmSysregIapsrNzcvqg
  succ ArmSysregIapsrNzcvqg = ArmSysregEapsr
  succ ArmSysregEapsr = ArmSysregEapsrG
  succ ArmSysregEapsrG = ArmSysregEapsrNzcvqg
  succ ArmSysregEapsrNzcvqg = ArmSysregXpsr
  succ ArmSysregXpsr = ArmSysregXpsrG
  succ ArmSysregXpsrG = ArmSysregXpsrNzcvqg
  succ ArmSysregXpsrNzcvqg = ArmSysregIpsr
  succ ArmSysregIpsr = ArmSysregEpsr
  succ ArmSysregEpsr = ArmSysregIepsr
  succ ArmSysregIepsr = ArmSysregMsp
  succ ArmSysregMsp = ArmSysregPsp
  succ ArmSysregPsp = ArmSysregPrimask
  succ ArmSysregPrimask = ArmSysregBasepri
  succ ArmSysregBasepri = ArmSysregBasepriMax
  succ ArmSysregBasepriMax = ArmSysregFaultmask
  succ ArmSysregFaultmask = ArmSysregControl
  succ ArmSysregControl = error "ArmSysreg.succ: ArmSysregControl has no successor"

  pred ArmSysregSpsrC = ArmSysregInvalid
  pred ArmSysregSpsrX = ArmSysregSpsrC
  pred ArmSysregSpsrS = ArmSysregSpsrX
  pred ArmSysregSpsrF = ArmSysregSpsrS
  pred ArmSysregCpsrC = ArmSysregSpsrF
  pred ArmSysregCpsrX = ArmSysregCpsrC
  pred ArmSysregCpsrS = ArmSysregCpsrX
  pred ArmSysregCpsrF = ArmSysregCpsrS
  pred ArmSysregApsr = ArmSysregCpsrF
  pred ArmSysregApsrG = ArmSysregApsr
  pred ArmSysregApsrNzcvq = ArmSysregApsrG
  pred ArmSysregApsrNzcvqg = ArmSysregApsrNzcvq
  pred ArmSysregIapsr = ArmSysregApsrNzcvqg
  pred ArmSysregIapsrG = ArmSysregIapsr
  pred ArmSysregIapsrNzcvqg = ArmSysregIapsrG
  pred ArmSysregEapsr = ArmSysregIapsrNzcvqg
  pred ArmSysregEapsrG = ArmSysregEapsr
  pred ArmSysregEapsrNzcvqg = ArmSysregEapsrG
  pred ArmSysregXpsr = ArmSysregEapsrNzcvqg
  pred ArmSysregXpsrG = ArmSysregXpsr
  pred ArmSysregXpsrNzcvqg = ArmSysregXpsrG
  pred ArmSysregIpsr = ArmSysregXpsrNzcvqg
  pred ArmSysregEpsr = ArmSysregIpsr
  pred ArmSysregIepsr = ArmSysregEpsr
  pred ArmSysregMsp = ArmSysregIepsr
  pred ArmSysregPsp = ArmSysregMsp
  pred ArmSysregPrimask = ArmSysregPsp
  pred ArmSysregBasepri = ArmSysregPrimask
  pred ArmSysregBasepriMax = ArmSysregBasepri
  pred ArmSysregFaultmask = ArmSysregBasepriMax
  pred ArmSysregControl = ArmSysregFaultmask
  pred ArmSysregInvalid = error "ArmSysreg.pred: ArmSysregInvalid 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 ArmSysregControl

  fromEnum ArmSysregInvalid = 0
  fromEnum ArmSysregSpsrC = 1
  fromEnum ArmSysregSpsrX = 2
  fromEnum ArmSysregSpsrS = 4
  fromEnum ArmSysregSpsrF = 8
  fromEnum ArmSysregCpsrC = 16
  fromEnum ArmSysregCpsrX = 32
  fromEnum ArmSysregCpsrS = 64
  fromEnum ArmSysregCpsrF = 128
  fromEnum ArmSysregApsr = 256
  fromEnum ArmSysregApsrG = 257
  fromEnum ArmSysregApsrNzcvq = 258
  fromEnum ArmSysregApsrNzcvqg = 259
  fromEnum ArmSysregIapsr = 260
  fromEnum ArmSysregIapsrG = 261
  fromEnum ArmSysregIapsrNzcvqg = 262
  fromEnum ArmSysregEapsr = 263
  fromEnum ArmSysregEapsrG = 264
  fromEnum ArmSysregEapsrNzcvqg = 265
  fromEnum ArmSysregXpsr = 266
  fromEnum ArmSysregXpsrG = 267
  fromEnum ArmSysregXpsrNzcvqg = 268
  fromEnum ArmSysregIpsr = 269
  fromEnum ArmSysregEpsr = 270
  fromEnum ArmSysregIepsr = 271
  fromEnum ArmSysregMsp = 272
  fromEnum ArmSysregPsp = 273
  fromEnum ArmSysregPrimask = 274
  fromEnum ArmSysregBasepri = 275
  fromEnum ArmSysregBasepriMax = 276
  fromEnum ArmSysregFaultmask = 277
  fromEnum ArmSysregControl = 278

  toEnum 0 = ArmSysregInvalid
  toEnum 1 = ArmSysregSpsrC
  toEnum 2 = ArmSysregSpsrX
  toEnum 4 = ArmSysregSpsrS
  toEnum 8 = ArmSysregSpsrF
  toEnum 16 = ArmSysregCpsrC
  toEnum 32 = ArmSysregCpsrX
  toEnum 64 = ArmSysregCpsrS
  toEnum 128 = ArmSysregCpsrF
  toEnum 256 = ArmSysregApsr
  toEnum 257 = ArmSysregApsrG
  toEnum 258 = ArmSysregApsrNzcvq
  toEnum 259 = ArmSysregApsrNzcvqg
  toEnum 260 = ArmSysregIapsr
  toEnum 261 = ArmSysregIapsrG
  toEnum 262 = ArmSysregIapsrNzcvqg
  toEnum 263 = ArmSysregEapsr
  toEnum 264 = ArmSysregEapsrG
  toEnum 265 = ArmSysregEapsrNzcvqg
  toEnum 266 = ArmSysregXpsr
  toEnum 267 = ArmSysregXpsrG
  toEnum 268 = ArmSysregXpsrNzcvqg
  toEnum 269 = ArmSysregIpsr
  toEnum 270 = ArmSysregEpsr
  toEnum 271 = ArmSysregIepsr
  toEnum 272 = ArmSysregMsp
  toEnum 273 = ArmSysregPsp
  toEnum 274 = ArmSysregPrimask
  toEnum 275 = ArmSysregBasepri
  toEnum 276 = ArmSysregBasepriMax
  toEnum 277 = ArmSysregFaultmask
  toEnum 278 = ArmSysregControl
  toEnum unmatched = error ("ArmSysreg.toEnum: Cannot match " ++ show unmatched)

{-# LINE 38 "src/Hapstone/Internal/Arm.chs" #-}

-- | memory barrier operands (map directly to the 4-bit encoding of the option
-- field for Memory Barrier operations, when given as an integer)
data ArmMemBarrier = ArmMbInvalid
                   | ArmMbReserved0
                   | ArmMbOshld
                   | ArmMbOshst
                   | ArmMbOsh
                   | ArmMbReserved4
                   | ArmMbNshld
                   | ArmMbNshst
                   | ArmMbNsh
                   | ArmMbReserved8
                   | ArmMbIshld
                   | ArmMbIshst
                   | ArmMbIsh
                   | ArmMbReserved12
                   | ArmMbLd
                   | ArmMbSt
                   | ArmMbSy
  deriving (Show,Eq,Bounded)
instance Enum ArmMemBarrier where
  succ ArmMbInvalid = ArmMbReserved0
  succ ArmMbReserved0 = ArmMbOshld
  succ ArmMbOshld = ArmMbOshst
  succ ArmMbOshst = ArmMbOsh
  succ ArmMbOsh = ArmMbReserved4
  succ ArmMbReserved4 = ArmMbNshld
  succ ArmMbNshld = ArmMbNshst
  succ ArmMbNshst = ArmMbNsh
  succ ArmMbNsh = ArmMbReserved8
  succ ArmMbReserved8 = ArmMbIshld
  succ ArmMbIshld = ArmMbIshst
  succ ArmMbIshst = ArmMbIsh
  succ ArmMbIsh = ArmMbReserved12
  succ ArmMbReserved12 = ArmMbLd
  succ ArmMbLd = ArmMbSt
  succ ArmMbSt = ArmMbSy
  succ ArmMbSy = error "ArmMemBarrier.succ: ArmMbSy has no successor"

  pred ArmMbReserved0 = ArmMbInvalid
  pred ArmMbOshld = ArmMbReserved0
  pred ArmMbOshst = ArmMbOshld
  pred ArmMbOsh = ArmMbOshst
  pred ArmMbReserved4 = ArmMbOsh
  pred ArmMbNshld = ArmMbReserved4
  pred ArmMbNshst = ArmMbNshld
  pred ArmMbNsh = ArmMbNshst
  pred ArmMbReserved8 = ArmMbNsh
  pred ArmMbIshld = ArmMbReserved8
  pred ArmMbIshst = ArmMbIshld
  pred ArmMbIsh = ArmMbIshst
  pred ArmMbReserved12 = ArmMbIsh
  pred ArmMbLd = ArmMbReserved12
  pred ArmMbSt = ArmMbLd
  pred ArmMbSy = ArmMbSt
  pred ArmMbInvalid = error "ArmMemBarrier.pred: ArmMbInvalid 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 ArmMbSy

  fromEnum ArmMbInvalid = 0
  fromEnum ArmMbReserved0 = 1
  fromEnum ArmMbOshld = 2
  fromEnum ArmMbOshst = 3
  fromEnum ArmMbOsh = 4
  fromEnum ArmMbReserved4 = 5
  fromEnum ArmMbNshld = 6
  fromEnum ArmMbNshst = 7
  fromEnum ArmMbNsh = 8
  fromEnum ArmMbReserved8 = 9
  fromEnum ArmMbIshld = 10
  fromEnum ArmMbIshst = 11
  fromEnum ArmMbIsh = 12
  fromEnum ArmMbReserved12 = 13
  fromEnum ArmMbLd = 14
  fromEnum ArmMbSt = 15
  fromEnum ArmMbSy = 16

  toEnum 0 = ArmMbInvalid
  toEnum 1 = ArmMbReserved0
  toEnum 2 = ArmMbOshld
  toEnum 3 = ArmMbOshst
  toEnum 4 = ArmMbOsh
  toEnum 5 = ArmMbReserved4
  toEnum 6 = ArmMbNshld
  toEnum 7 = ArmMbNshst
  toEnum 8 = ArmMbNsh
  toEnum 9 = ArmMbReserved8
  toEnum 10 = ArmMbIshld
  toEnum 11 = ArmMbIshst
  toEnum 12 = ArmMbIsh
  toEnum 13 = ArmMbReserved12
  toEnum 14 = ArmMbLd
  toEnum 15 = ArmMbSt
  toEnum 16 = ArmMbSy
  toEnum unmatched = error ("ArmMemBarrier.toEnum: Cannot match " ++ show unmatched)

{-# LINE 42 "src/Hapstone/Internal/Arm.chs" #-}


-- | operand type for instruction's operands
data ArmOpType = ArmOpInvalid
               | ArmOpReg
               | ArmOpImm
               | ArmOpMem
               | ArmOpFp
               | ArmOpCimm
               | ArmOpPimm
               | ArmOpSetend
               | ArmOpSysreg
  deriving (Show,Eq,Bounded)
instance Enum ArmOpType where
  succ ArmOpInvalid = ArmOpReg
  succ ArmOpReg = ArmOpImm
  succ ArmOpImm = ArmOpMem
  succ ArmOpMem = ArmOpFp
  succ ArmOpFp = ArmOpCimm
  succ ArmOpCimm = ArmOpPimm
  succ ArmOpPimm = ArmOpSetend
  succ ArmOpSetend = ArmOpSysreg
  succ ArmOpSysreg = error "ArmOpType.succ: ArmOpSysreg has no successor"

  pred ArmOpReg = ArmOpInvalid
  pred ArmOpImm = ArmOpReg
  pred ArmOpMem = ArmOpImm
  pred ArmOpFp = ArmOpMem
  pred ArmOpCimm = ArmOpFp
  pred ArmOpPimm = ArmOpCimm
  pred ArmOpSetend = ArmOpPimm
  pred ArmOpSysreg = ArmOpSetend
  pred ArmOpInvalid = error "ArmOpType.pred: ArmOpInvalid 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 ArmOpSysreg

  fromEnum ArmOpInvalid = 0
  fromEnum ArmOpReg = 1
  fromEnum ArmOpImm = 2
  fromEnum ArmOpMem = 3
  fromEnum ArmOpFp = 4
  fromEnum ArmOpCimm = 64
  fromEnum ArmOpPimm = 65
  fromEnum ArmOpSetend = 66
  fromEnum ArmOpSysreg = 67

  toEnum 0 = ArmOpInvalid
  toEnum 1 = ArmOpReg
  toEnum 2 = ArmOpImm
  toEnum 3 = ArmOpMem
  toEnum 4 = ArmOpFp
  toEnum 64 = ArmOpCimm
  toEnum 65 = ArmOpPimm
  toEnum 66 = ArmOpSetend
  toEnum 67 = ArmOpSysreg
  toEnum unmatched = error ("ArmOpType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 46 "src/Hapstone/Internal/Arm.chs" #-}


-- | operand type for SETEND instruction
data ArmSetendType = ArmSetendInvalid
                   | ArmSetendBe
                   | ArmSetendLe
  deriving (Show,Eq,Bounded)
instance Enum ArmSetendType where
  succ ArmSetendInvalid = ArmSetendBe
  succ ArmSetendBe = ArmSetendLe
  succ ArmSetendLe = error "ArmSetendType.succ: ArmSetendLe has no successor"

  pred ArmSetendBe = ArmSetendInvalid
  pred ArmSetendLe = ArmSetendBe
  pred ArmSetendInvalid = error "ArmSetendType.pred: ArmSetendInvalid 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 ArmSetendLe

  fromEnum ArmSetendInvalid = 0
  fromEnum ArmSetendBe = 1
  fromEnum ArmSetendLe = 2

  toEnum 0 = ArmSetendInvalid
  toEnum 1 = ArmSetendBe
  toEnum 2 = ArmSetendLe
  toEnum unmatched = error ("ArmSetendType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 50 "src/Hapstone/Internal/Arm.chs" #-}

data ArmCpsmodeType = ArmCpsmodeInvalid
                    | ArmCpsmodeIe
                    | ArmCpsmodeId
  deriving (Show,Eq,Bounded)
instance Enum ArmCpsmodeType where
  succ ArmCpsmodeInvalid = ArmCpsmodeIe
  succ ArmCpsmodeIe = ArmCpsmodeId
  succ ArmCpsmodeId = error "ArmCpsmodeType.succ: ArmCpsmodeId has no successor"

  pred ArmCpsmodeIe = ArmCpsmodeInvalid
  pred ArmCpsmodeId = ArmCpsmodeIe
  pred ArmCpsmodeInvalid = error "ArmCpsmodeType.pred: ArmCpsmodeInvalid 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 ArmCpsmodeId

  fromEnum ArmCpsmodeInvalid = 0
  fromEnum ArmCpsmodeIe = 2
  fromEnum ArmCpsmodeId = 3

  toEnum 0 = ArmCpsmodeInvalid
  toEnum 2 = ArmCpsmodeIe
  toEnum 3 = ArmCpsmodeId
  toEnum unmatched = error ("ArmCpsmodeType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 52 "src/Hapstone/Internal/Arm.chs" #-}

-- | operand type for SETEND instruction
data ArmCpsflagType = ArmCpsflagInvalid
                    | ArmCpsflagF
                    | ArmCpsflagI
                    | ArmCpsflagA
                    | ArmCpsflagNone
  deriving (Show,Eq,Bounded)
instance Enum ArmCpsflagType where
  succ ArmCpsflagInvalid = ArmCpsflagF
  succ ArmCpsflagF = ArmCpsflagI
  succ ArmCpsflagI = ArmCpsflagA
  succ ArmCpsflagA = ArmCpsflagNone
  succ ArmCpsflagNone = error "ArmCpsflagType.succ: ArmCpsflagNone has no successor"

  pred ArmCpsflagF = ArmCpsflagInvalid
  pred ArmCpsflagI = ArmCpsflagF
  pred ArmCpsflagA = ArmCpsflagI
  pred ArmCpsflagNone = ArmCpsflagA
  pred ArmCpsflagInvalid = error "ArmCpsflagType.pred: ArmCpsflagInvalid 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 ArmCpsflagNone

  fromEnum ArmCpsflagInvalid = 0
  fromEnum ArmCpsflagF = 1
  fromEnum ArmCpsflagI = 2
  fromEnum ArmCpsflagA = 4
  fromEnum ArmCpsflagNone = 16

  toEnum 0 = ArmCpsflagInvalid
  toEnum 1 = ArmCpsflagF
  toEnum 2 = ArmCpsflagI
  toEnum 4 = ArmCpsflagA
  toEnum 16 = ArmCpsflagNone
  toEnum unmatched = error ("ArmCpsflagType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 55 "src/Hapstone/Internal/Arm.chs" #-}

-- | data type for elements of vector instructions
data ArmVectordataType = ArmVectordataInvalid
                       | ArmVectordataI8
                       | ArmVectordataI16
                       | ArmVectordataI32
                       | ArmVectordataI64
                       | ArmVectordataS8
                       | ArmVectordataS16
                       | ArmVectordataS32
                       | ArmVectordataS64
                       | ArmVectordataU8
                       | ArmVectordataU16
                       | ArmVectordataU32
                       | ArmVectordataU64
                       | ArmVectordataP8
                       | ArmVectordataF32
                       | ArmVectordataF64
                       | ArmVectordataF16f64
                       | ArmVectordataF64f16
                       | ArmVectordataF32f16
                       | ArmVectordataF16f32
                       | ArmVectordataF64f32
                       | ArmVectordataF32f64
                       | ArmVectordataS32f32
                       | ArmVectordataU32f32
                       | ArmVectordataF32s32
                       | ArmVectordataF32u32
                       | ArmVectordataF64s16
                       | ArmVectordataF32s16
                       | ArmVectordataF64s32
                       | ArmVectordataS16f64
                       | ArmVectordataS16f32
                       | ArmVectordataS32f64
                       | ArmVectordataU16f64
                       | ArmVectordataU16f32
                       | ArmVectordataU32f64
                       | ArmVectordataF64u16
                       | ArmVectordataF32u16
                       | ArmVectordataF64u32
  deriving (Show,Eq,Bounded)
instance Enum ArmVectordataType where
  succ ArmVectordataInvalid = ArmVectordataI8
  succ ArmVectordataI8 = ArmVectordataI16
  succ ArmVectordataI16 = ArmVectordataI32
  succ ArmVectordataI32 = ArmVectordataI64
  succ ArmVectordataI64 = ArmVectordataS8
  succ ArmVectordataS8 = ArmVectordataS16
  succ ArmVectordataS16 = ArmVectordataS32
  succ ArmVectordataS32 = ArmVectordataS64
  succ ArmVectordataS64 = ArmVectordataU8
  succ ArmVectordataU8 = ArmVectordataU16
  succ ArmVectordataU16 = ArmVectordataU32
  succ ArmVectordataU32 = ArmVectordataU64
  succ ArmVectordataU64 = ArmVectordataP8
  succ ArmVectordataP8 = ArmVectordataF32
  succ ArmVectordataF32 = ArmVectordataF64
  succ ArmVectordataF64 = ArmVectordataF16f64
  succ ArmVectordataF16f64 = ArmVectordataF64f16
  succ ArmVectordataF64f16 = ArmVectordataF32f16
  succ ArmVectordataF32f16 = ArmVectordataF16f32
  succ ArmVectordataF16f32 = ArmVectordataF64f32
  succ ArmVectordataF64f32 = ArmVectordataF32f64
  succ ArmVectordataF32f64 = ArmVectordataS32f32
  succ ArmVectordataS32f32 = ArmVectordataU32f32
  succ ArmVectordataU32f32 = ArmVectordataF32s32
  succ ArmVectordataF32s32 = ArmVectordataF32u32
  succ ArmVectordataF32u32 = ArmVectordataF64s16
  succ ArmVectordataF64s16 = ArmVectordataF32s16
  succ ArmVectordataF32s16 = ArmVectordataF64s32
  succ ArmVectordataF64s32 = ArmVectordataS16f64
  succ ArmVectordataS16f64 = ArmVectordataS16f32
  succ ArmVectordataS16f32 = ArmVectordataS32f64
  succ ArmVectordataS32f64 = ArmVectordataU16f64
  succ ArmVectordataU16f64 = ArmVectordataU16f32
  succ ArmVectordataU16f32 = ArmVectordataU32f64
  succ ArmVectordataU32f64 = ArmVectordataF64u16
  succ ArmVectordataF64u16 = ArmVectordataF32u16
  succ ArmVectordataF32u16 = ArmVectordataF64u32
  succ ArmVectordataF64u32 = error "ArmVectordataType.succ: ArmVectordataF64u32 has no successor"

  pred ArmVectordataI8 = ArmVectordataInvalid
  pred ArmVectordataI16 = ArmVectordataI8
  pred ArmVectordataI32 = ArmVectordataI16
  pred ArmVectordataI64 = ArmVectordataI32
  pred ArmVectordataS8 = ArmVectordataI64
  pred ArmVectordataS16 = ArmVectordataS8
  pred ArmVectordataS32 = ArmVectordataS16
  pred ArmVectordataS64 = ArmVectordataS32
  pred ArmVectordataU8 = ArmVectordataS64
  pred ArmVectordataU16 = ArmVectordataU8
  pred ArmVectordataU32 = ArmVectordataU16
  pred ArmVectordataU64 = ArmVectordataU32
  pred ArmVectordataP8 = ArmVectordataU64
  pred ArmVectordataF32 = ArmVectordataP8
  pred ArmVectordataF64 = ArmVectordataF32
  pred ArmVectordataF16f64 = ArmVectordataF64
  pred ArmVectordataF64f16 = ArmVectordataF16f64
  pred ArmVectordataF32f16 = ArmVectordataF64f16
  pred ArmVectordataF16f32 = ArmVectordataF32f16
  pred ArmVectordataF64f32 = ArmVectordataF16f32
  pred ArmVectordataF32f64 = ArmVectordataF64f32
  pred ArmVectordataS32f32 = ArmVectordataF32f64
  pred ArmVectordataU32f32 = ArmVectordataS32f32
  pred ArmVectordataF32s32 = ArmVectordataU32f32
  pred ArmVectordataF32u32 = ArmVectordataF32s32
  pred ArmVectordataF64s16 = ArmVectordataF32u32
  pred ArmVectordataF32s16 = ArmVectordataF64s16
  pred ArmVectordataF64s32 = ArmVectordataF32s16
  pred ArmVectordataS16f64 = ArmVectordataF64s32
  pred ArmVectordataS16f32 = ArmVectordataS16f64
  pred ArmVectordataS32f64 = ArmVectordataS16f32
  pred ArmVectordataU16f64 = ArmVectordataS32f64
  pred ArmVectordataU16f32 = ArmVectordataU16f64
  pred ArmVectordataU32f64 = ArmVectordataU16f32
  pred ArmVectordataF64u16 = ArmVectordataU32f64
  pred ArmVectordataF32u16 = ArmVectordataF64u16
  pred ArmVectordataF64u32 = ArmVectordataF32u16
  pred ArmVectordataInvalid = error "ArmVectordataType.pred: ArmVectordataInvalid 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 ArmVectordataF64u32

  fromEnum ArmVectordataInvalid = 0
  fromEnum ArmVectordataI8 = 1
  fromEnum ArmVectordataI16 = 2
  fromEnum ArmVectordataI32 = 3
  fromEnum ArmVectordataI64 = 4
  fromEnum ArmVectordataS8 = 5
  fromEnum ArmVectordataS16 = 6
  fromEnum ArmVectordataS32 = 7
  fromEnum ArmVectordataS64 = 8
  fromEnum ArmVectordataU8 = 9
  fromEnum ArmVectordataU16 = 10
  fromEnum ArmVectordataU32 = 11
  fromEnum ArmVectordataU64 = 12
  fromEnum ArmVectordataP8 = 13
  fromEnum ArmVectordataF32 = 14
  fromEnum ArmVectordataF64 = 15
  fromEnum ArmVectordataF16f64 = 16
  fromEnum ArmVectordataF64f16 = 17
  fromEnum ArmVectordataF32f16 = 18
  fromEnum ArmVectordataF16f32 = 19
  fromEnum ArmVectordataF64f32 = 20
  fromEnum ArmVectordataF32f64 = 21
  fromEnum ArmVectordataS32f32 = 22
  fromEnum ArmVectordataU32f32 = 23
  fromEnum ArmVectordataF32s32 = 24
  fromEnum ArmVectordataF32u32 = 25
  fromEnum ArmVectordataF64s16 = 26
  fromEnum ArmVectordataF32s16 = 27
  fromEnum ArmVectordataF64s32 = 28
  fromEnum ArmVectordataS16f64 = 29
  fromEnum ArmVectordataS16f32 = 30
  fromEnum ArmVectordataS32f64 = 31
  fromEnum ArmVectordataU16f64 = 32
  fromEnum ArmVectordataU16f32 = 33
  fromEnum ArmVectordataU32f64 = 34
  fromEnum ArmVectordataF64u16 = 35
  fromEnum ArmVectordataF32u16 = 36
  fromEnum ArmVectordataF64u32 = 37

  toEnum 0 = ArmVectordataInvalid
  toEnum 1 = ArmVectordataI8
  toEnum 2 = ArmVectordataI16
  toEnum 3 = ArmVectordataI32
  toEnum 4 = ArmVectordataI64
  toEnum 5 = ArmVectordataS8
  toEnum 6 = ArmVectordataS16
  toEnum 7 = ArmVectordataS32
  toEnum 8 = ArmVectordataS64
  toEnum 9 = ArmVectordataU8
  toEnum 10 = ArmVectordataU16
  toEnum 11 = ArmVectordataU32
  toEnum 12 = ArmVectordataU64
  toEnum 13 = ArmVectordataP8
  toEnum 14 = ArmVectordataF32
  toEnum 15 = ArmVectordataF64
  toEnum 16 = ArmVectordataF16f64
  toEnum 17 = ArmVectordataF64f16
  toEnum 18 = ArmVectordataF32f16
  toEnum 19 = ArmVectordataF16f32
  toEnum 20 = ArmVectordataF64f32
  toEnum 21 = ArmVectordataF32f64
  toEnum 22 = ArmVectordataS32f32
  toEnum 23 = ArmVectordataU32f32
  toEnum 24 = ArmVectordataF32s32
  toEnum 25 = ArmVectordataF32u32
  toEnum 26 = ArmVectordataF64s16
  toEnum 27 = ArmVectordataF32s16
  toEnum 28 = ArmVectordataF64s32
  toEnum 29 = ArmVectordataS16f64
  toEnum 30 = ArmVectordataS16f32
  toEnum 31 = ArmVectordataS32f64
  toEnum 32 = ArmVectordataU16f64
  toEnum 33 = ArmVectordataU16f32
  toEnum 34 = ArmVectordataU32f64
  toEnum 35 = ArmVectordataF64u16
  toEnum 36 = ArmVectordataF32u16
  toEnum 37 = ArmVectordataF64u32
  toEnum unmatched = error ("ArmVectordataType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 58 "src/Hapstone/Internal/Arm.chs" #-}


-- | memory access operands
-- associated with 'ArmOpMem' operand type
data ArmOpMemStruct = ArmOpMemStruct
    { base :: Word32 -- ^ base register
    , index :: Word32 -- ^ index register
    , scale :: Int32 -- ^ scale for index register (1 or -1)
    , disp :: Int32 -- ^ displacement/offset value
    } deriving (Show, Eq)

instance Storable ArmOpMemStruct where
    sizeOf _ = 16
{-# LINE 70 "src/Hapstone/Internal/Arm.chs" #-}

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

    peek p = ArmOpMemStruct
        <$> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CUInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CUInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 12 :: IO C2HSImp.CInt}) p)
    poke p (ArmOpMemStruct b i s d) = do
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CUInt)}) p (fromIntegral b)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 4 (val :: C2HSImp.CUInt)}) p (fromIntegral i)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 8 (val :: C2HSImp.CInt)}) p (fromIntegral s)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 12 (val :: C2HSImp.CInt)}) p (fromIntegral d)

-- | possible operand types (corresponding to the tagged union in the C header)
data CsArmOpValue
    = Reg Word32 -- ^ register value for 'ArmOpReg' operands
    | Sysreg Word32 -- ^ register value for 'ArmOpSysreg' operands
    | Imm Int32 -- ^ immediate value for 'ArmOpImm' operands
    | Cimm Int32 -- ^ immediate value for 'ArmOpCimm' operands
    | Pimm Int32 -- ^ immediate value for 'ArmOpPimm' operands
    | Fp Double -- ^ floating point value for 'ArmOpFp' operands
    | Mem ArmOpMemStruct -- ^ base,index,scale,disp value for
                         -- 'ArmOpMem' operands
    | Setend ArmSetendType -- ^ SETEND instruction's operand type
    | Undefined -- ^ invalid operand value, for 'ArmOpInvalid' operand
    deriving (Show, Eq)

-- | instruction operands
data CsArmOp = CsArmOp
    { vectorIndex :: Int32 -- ^ vector index for some vector operands, else -1
    , shift :: (ArmShifter, Word32) -- ^ shifter type and value
    , value :: CsArmOpValue -- ^ operand type and value
    , subtracted :: Bool -- ^ if 'True', operand is subtracted, else added
    } deriving (Show, Eq)

instance Storable CsArmOp where
    sizeOf _ = 40
    alignment _ = 8
    peek p = CsArmOp
        <$> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p)
        <*> ((,) <$>
            ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CInt}) p) <*>
            (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CUInt}) p))
        <*> do
            t <- fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 12 :: IO C2HSImp.CInt}) p :: IO Int
            let bP = plusPtr p 16
            case toEnum t of
              ArmOpReg -> (Reg . fromIntegral) <$> (peek bP :: IO CUInt)
              ArmOpSysreg -> (Sysreg . fromIntegral) <$> (peek bP :: IO CUInt)
              ArmOpImm -> (Imm . fromIntegral) <$> (peek bP :: IO CInt)
              ArmOpCimm -> (Cimm . fromIntegral) <$> (peek bP :: IO CInt)
              ArmOpPimm -> (Pimm . fromIntegral) <$> (peek bP :: IO CInt)
              ArmOpFp -> (Fp . realToFrac) <$> (peek bP :: IO CDouble)
              ArmOpMem -> Mem <$> (peek bP :: IO ArmOpMemStruct)
              ArmOpSetend -> (Setend . toEnum . fromIntegral) <$>
                  (peek bP :: IO CInt)
              _ -> return Undefined
        <*> (toBool <$> (peekByteOff p 32 :: IO Word8)) -- subtracted
    poke p (CsArmOp vI (sh, shV) val sub) = do
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CInt)}) p (fromIntegral vI)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 4 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum sh)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 8 (val :: C2HSImp.CUInt)}) p (fromIntegral shV)
        let bP = plusPtr p 16
            setType = (\ptr val -> do {C2HSImp.pokeByteOff ptr 12 (val :: C2HSImp.CInt)}) p . fromIntegral . fromEnum
        case val of
          Reg r -> do
              poke bP (fromIntegral r :: CUInt)
              setType ArmOpReg
          Sysreg r -> do
              poke bP (fromIntegral r :: CUInt)
              setType ArmOpSysreg
          Imm i -> do
              poke bP (fromIntegral i :: CInt)
              setType ArmOpImm
          Cimm i -> do
              poke bP (fromIntegral i :: CInt)
              setType ArmOpCimm
          Pimm i -> do
              poke bP (fromIntegral i :: CInt)
              setType ArmOpPimm
          Fp f -> do
              poke bP (realToFrac f :: CDouble)
              setType ArmOpFp
          Mem m -> do
              poke bP m
              setType ArmOpMem
          Setend s -> do
              poke bP (fromIntegral $ fromEnum s :: CInt)
              setType ArmOpSetend
          _ -> setType ArmOpInvalid
        pokeByteOff p 32 (fromBool sub :: Word8) -- subtracted

-- | instruction datatype
data CsArm = CsArm
    { usermode :: Bool -- ^ usermode registers to be loaded (for LDM/STM
                       -- instructions)
    , vectorSize :: Int32 -- ^ scalar size for vector instructions
    , vectorData :: ArmVectordataType -- ^ data type for elements of vector
                                      -- instructions
    , cpsMode :: ArmCpsmodeType -- ^ CPS mode for CPS instructions
    , cpsFlag :: ArmCpsflagType -- ^ CPS mode for CPS instructions
    , cc :: ArmConditionCode -- condition code
    , updateFlags :: Bool -- does this instruction update flags?
    , writeback :: Bool -- ^ does this instruction request writeback?
    , memBarrier :: ArmMemBarrier -- ^ options for some memory barrier
                                  -- instructions
    , operands :: [CsArmOp] -- ^ operand list of this instruction, *MUST*
                            -- have <= 36 elements, 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 CsArm where
    sizeOf _ = 1480
    alignment _ = 8
    peek p = CsArm
        <$> (toBool <$> (peekByteOff p 0 :: IO Word8)) -- usermode
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 12 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 16 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 20 :: IO C2HSImp.CInt}) p)
        <*> (toBool <$> (peekByteOff p 24 :: IO Word8)) -- update_flags
        <*> (toBool <$> (peekByteOff p 25 :: IO Word8)) -- writeback
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 28 :: IO C2HSImp.CInt}) p)
        <*> do num <- fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 32 :: IO C2HSImp.CUChar}) p
               let ptr = plusPtr p 40
               peekArray num ptr
    poke p (CsArm u vS vD cM cF cc uF w m o) = do
        pokeByteOff p 0 (fromBool u :: Word8) -- usermode
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 4 (val :: C2HSImp.CInt)}) p (fromIntegral vS)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 8 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum vD)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 12 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum cM)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 16 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum cF)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 20 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum cc)
        pokeByteOff p 24 (fromBool uF :: Word8) -- update_flags
        pokeByteOff p 25 (fromBool w :: Word8) -- writeback
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 28 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum m)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 32 (val :: C2HSImp.CUChar)}) p (fromIntegral $ length o)
        if length o > 36
           then error "operands overflew 36 elements"
           else pokeArray (plusPtr p 40) o

-- | ARM registers
data ArmReg = ArmRegInvalid
            | ArmRegApsr
            | ArmRegApsrNzcv
            | ArmRegCpsr
            | ArmRegFpexc
            | ArmRegFpinst
            | ArmRegFpscr
            | ArmRegFpscrNzcv
            | ArmRegFpsid
            | ArmRegItstate
            | ArmRegLr
            | ArmRegR14
            | ArmRegPc
            | ArmRegR15
            | ArmRegSp
            | ArmRegR13
            | ArmRegSpsr
            | ArmRegD0
            | ArmRegD1
            | ArmRegD2
            | ArmRegD3
            | ArmRegD4
            | ArmRegD5
            | ArmRegD6
            | ArmRegD7
            | ArmRegD8
            | ArmRegD9
            | ArmRegD10
            | ArmRegD11
            | ArmRegD12
            | ArmRegD13
            | ArmRegD14
            | ArmRegD15
            | ArmRegD16
            | ArmRegD17
            | ArmRegD18
            | ArmRegD19
            | ArmRegD20
            | ArmRegD21
            | ArmRegD22
            | ArmRegD23
            | ArmRegD24
            | ArmRegD25
            | ArmRegD26
            | ArmRegD27
            | ArmRegD28
            | ArmRegD29
            | ArmRegD30
            | ArmRegD31
            | ArmRegFpinst2
            | ArmRegMvfr0
            | ArmRegMvfr1
            | ArmRegMvfr2
            | ArmRegQ0
            | ArmRegQ1
            | ArmRegQ2
            | ArmRegQ3
            | ArmRegQ4
            | ArmRegQ5
            | ArmRegQ6
            | ArmRegQ7
            | ArmRegQ8
            | ArmRegQ9
            | ArmRegQ10
            | ArmRegQ11
            | ArmRegQ12
            | ArmRegQ13
            | ArmRegQ14
            | ArmRegQ15
            | ArmRegR0
            | ArmRegR1
            | ArmRegR2
            | ArmRegR3
            | ArmRegR4
            | ArmRegR5
            | ArmRegR6
            | ArmRegR7
            | ArmRegR8
            | ArmRegR9
            | ArmRegSb
            | ArmRegR10
            | ArmRegSl
            | ArmRegR11
            | ArmRegFp
            | ArmRegR12
            | ArmRegIp
            | ArmRegS0
            | ArmRegS1
            | ArmRegS2
            | ArmRegS3
            | ArmRegS4
            | ArmRegS5
            | ArmRegS6
            | ArmRegS7
            | ArmRegS8
            | ArmRegS9
            | ArmRegS10
            | ArmRegS11
            | ArmRegS12
            | ArmRegS13
            | ArmRegS14
            | ArmRegS15
            | ArmRegS16
            | ArmRegS17
            | ArmRegS18
            | ArmRegS19
            | ArmRegS20
            | ArmRegS21
            | ArmRegS22
            | ArmRegS23
            | ArmRegS24
            | ArmRegS25
            | ArmRegS26
            | ArmRegS27
            | ArmRegS28
            | ArmRegS29
            | ArmRegS30
            | ArmRegS31
            | ArmRegEnding
  deriving (Show,Eq,Bounded)
instance Enum ArmReg where
  succ ArmRegInvalid = ArmRegApsr
  succ ArmRegApsr = ArmRegApsrNzcv
  succ ArmRegApsrNzcv = ArmRegCpsr
  succ ArmRegCpsr = ArmRegFpexc
  succ ArmRegFpexc = ArmRegFpinst
  succ ArmRegFpinst = ArmRegFpscr
  succ ArmRegFpscr = ArmRegFpscrNzcv
  succ ArmRegFpscrNzcv = ArmRegFpsid
  succ ArmRegFpsid = ArmRegItstate
  succ ArmRegItstate = ArmRegLr
  succ ArmRegLr = ArmRegPc
  succ ArmRegR14 = ArmRegPc
  succ ArmRegPc = ArmRegSp
  succ ArmRegR15 = ArmRegSp
  succ ArmRegSp = ArmRegSpsr
  succ ArmRegR13 = ArmRegSpsr
  succ ArmRegSpsr = ArmRegD0
  succ ArmRegD0 = ArmRegD1
  succ ArmRegD1 = ArmRegD2
  succ ArmRegD2 = ArmRegD3
  succ ArmRegD3 = ArmRegD4
  succ ArmRegD4 = ArmRegD5
  succ ArmRegD5 = ArmRegD6
  succ ArmRegD6 = ArmRegD7
  succ ArmRegD7 = ArmRegD8
  succ ArmRegD8 = ArmRegD9
  succ ArmRegD9 = ArmRegD10
  succ ArmRegD10 = ArmRegD11
  succ ArmRegD11 = ArmRegD12
  succ ArmRegD12 = ArmRegD13
  succ ArmRegD13 = ArmRegD14
  succ ArmRegD14 = ArmRegD15
  succ ArmRegD15 = ArmRegD16
  succ ArmRegD16 = ArmRegD17
  succ ArmRegD17 = ArmRegD18
  succ ArmRegD18 = ArmRegD19
  succ ArmRegD19 = ArmRegD20
  succ ArmRegD20 = ArmRegD21
  succ ArmRegD21 = ArmRegD22
  succ ArmRegD22 = ArmRegD23
  succ ArmRegD23 = ArmRegD24
  succ ArmRegD24 = ArmRegD25
  succ ArmRegD25 = ArmRegD26
  succ ArmRegD26 = ArmRegD27
  succ ArmRegD27 = ArmRegD28
  succ ArmRegD28 = ArmRegD29
  succ ArmRegD29 = ArmRegD30
  succ ArmRegD30 = ArmRegD31
  succ ArmRegD31 = ArmRegFpinst2
  succ ArmRegFpinst2 = ArmRegMvfr0
  succ ArmRegMvfr0 = ArmRegMvfr1
  succ ArmRegMvfr1 = ArmRegMvfr2
  succ ArmRegMvfr2 = ArmRegQ0
  succ ArmRegQ0 = ArmRegQ1
  succ ArmRegQ1 = ArmRegQ2
  succ ArmRegQ2 = ArmRegQ3
  succ ArmRegQ3 = ArmRegQ4
  succ ArmRegQ4 = ArmRegQ5
  succ ArmRegQ5 = ArmRegQ6
  succ ArmRegQ6 = ArmRegQ7
  succ ArmRegQ7 = ArmRegQ8
  succ ArmRegQ8 = ArmRegQ9
  succ ArmRegQ9 = ArmRegQ10
  succ ArmRegQ10 = ArmRegQ11
  succ ArmRegQ11 = ArmRegQ12
  succ ArmRegQ12 = ArmRegQ13
  succ ArmRegQ13 = ArmRegQ14
  succ ArmRegQ14 = ArmRegQ15
  succ ArmRegQ15 = ArmRegR0
  succ ArmRegR0 = ArmRegR1
  succ ArmRegR1 = ArmRegR2
  succ ArmRegR2 = ArmRegR3
  succ ArmRegR3 = ArmRegR4
  succ ArmRegR4 = ArmRegR5
  succ ArmRegR5 = ArmRegR6
  succ ArmRegR6 = ArmRegR7
  succ ArmRegR7 = ArmRegR8
  succ ArmRegR8 = ArmRegR9
  succ ArmRegR9 = ArmRegR10
  succ ArmRegSb = ArmRegR10
  succ ArmRegR10 = ArmRegR11
  succ ArmRegSl = ArmRegR11
  succ ArmRegR11 = ArmRegR12
  succ ArmRegFp = ArmRegR12
  succ ArmRegR12 = ArmRegS0
  succ ArmRegIp = ArmRegS0
  succ ArmRegS0 = ArmRegS1
  succ ArmRegS1 = ArmRegS2
  succ ArmRegS2 = ArmRegS3
  succ ArmRegS3 = ArmRegS4
  succ ArmRegS4 = ArmRegS5
  succ ArmRegS5 = ArmRegS6
  succ ArmRegS6 = ArmRegS7
  succ ArmRegS7 = ArmRegS8
  succ ArmRegS8 = ArmRegS9
  succ ArmRegS9 = ArmRegS10
  succ ArmRegS10 = ArmRegS11
  succ ArmRegS11 = ArmRegS12
  succ ArmRegS12 = ArmRegS13
  succ ArmRegS13 = ArmRegS14
  succ ArmRegS14 = ArmRegS15
  succ ArmRegS15 = ArmRegS16
  succ ArmRegS16 = ArmRegS17
  succ ArmRegS17 = ArmRegS18
  succ ArmRegS18 = ArmRegS19
  succ ArmRegS19 = ArmRegS20
  succ ArmRegS20 = ArmRegS21
  succ ArmRegS21 = ArmRegS22
  succ ArmRegS22 = ArmRegS23
  succ ArmRegS23 = ArmRegS24
  succ ArmRegS24 = ArmRegS25
  succ ArmRegS25 = ArmRegS26
  succ ArmRegS26 = ArmRegS27
  succ ArmRegS27 = ArmRegS28
  succ ArmRegS28 = ArmRegS29
  succ ArmRegS29 = ArmRegS30
  succ ArmRegS30 = ArmRegS31
  succ ArmRegS31 = ArmRegEnding
  succ ArmRegEnding = error "ArmReg.succ: ArmRegEnding has no successor"

  pred ArmRegApsr = ArmRegInvalid
  pred ArmRegApsrNzcv = ArmRegApsr
  pred ArmRegCpsr = ArmRegApsrNzcv
  pred ArmRegFpexc = ArmRegCpsr
  pred ArmRegFpinst = ArmRegFpexc
  pred ArmRegFpscr = ArmRegFpinst
  pred ArmRegFpscrNzcv = ArmRegFpscr
  pred ArmRegFpsid = ArmRegFpscrNzcv
  pred ArmRegItstate = ArmRegFpsid
  pred ArmRegLr = ArmRegItstate
  pred ArmRegR14 = ArmRegItstate
  pred ArmRegPc = ArmRegLr
  pred ArmRegR15 = ArmRegLr
  pred ArmRegSp = ArmRegPc
  pred ArmRegR13 = ArmRegPc
  pred ArmRegSpsr = ArmRegSp
  pred ArmRegD0 = ArmRegSpsr
  pred ArmRegD1 = ArmRegD0
  pred ArmRegD2 = ArmRegD1
  pred ArmRegD3 = ArmRegD2
  pred ArmRegD4 = ArmRegD3
  pred ArmRegD5 = ArmRegD4
  pred ArmRegD6 = ArmRegD5
  pred ArmRegD7 = ArmRegD6
  pred ArmRegD8 = ArmRegD7
  pred ArmRegD9 = ArmRegD8
  pred ArmRegD10 = ArmRegD9
  pred ArmRegD11 = ArmRegD10
  pred ArmRegD12 = ArmRegD11
  pred ArmRegD13 = ArmRegD12
  pred ArmRegD14 = ArmRegD13
  pred ArmRegD15 = ArmRegD14
  pred ArmRegD16 = ArmRegD15
  pred ArmRegD17 = ArmRegD16
  pred ArmRegD18 = ArmRegD17
  pred ArmRegD19 = ArmRegD18
  pred ArmRegD20 = ArmRegD19
  pred ArmRegD21 = ArmRegD20
  pred ArmRegD22 = ArmRegD21
  pred ArmRegD23 = ArmRegD22
  pred ArmRegD24 = ArmRegD23
  pred ArmRegD25 = ArmRegD24
  pred ArmRegD26 = ArmRegD25
  pred ArmRegD27 = ArmRegD26
  pred ArmRegD28 = ArmRegD27
  pred ArmRegD29 = ArmRegD28
  pred ArmRegD30 = ArmRegD29
  pred ArmRegD31 = ArmRegD30
  pred ArmRegFpinst2 = ArmRegD31
  pred ArmRegMvfr0 = ArmRegFpinst2
  pred ArmRegMvfr1 = ArmRegMvfr0
  pred ArmRegMvfr2 = ArmRegMvfr1
  pred ArmRegQ0 = ArmRegMvfr2
  pred ArmRegQ1 = ArmRegQ0
  pred ArmRegQ2 = ArmRegQ1
  pred ArmRegQ3 = ArmRegQ2
  pred ArmRegQ4 = ArmRegQ3
  pred ArmRegQ5 = ArmRegQ4
  pred ArmRegQ6 = ArmRegQ5
  pred ArmRegQ7 = ArmRegQ6
  pred ArmRegQ8 = ArmRegQ7
  pred ArmRegQ9 = ArmRegQ8
  pred ArmRegQ10 = ArmRegQ9
  pred ArmRegQ11 = ArmRegQ10
  pred ArmRegQ12 = ArmRegQ11
  pred ArmRegQ13 = ArmRegQ12
  pred ArmRegQ14 = ArmRegQ13
  pred ArmRegQ15 = ArmRegQ14
  pred ArmRegR0 = ArmRegQ15
  pred ArmRegR1 = ArmRegR0
  pred ArmRegR2 = ArmRegR1
  pred ArmRegR3 = ArmRegR2
  pred ArmRegR4 = ArmRegR3
  pred ArmRegR5 = ArmRegR4
  pred ArmRegR6 = ArmRegR5
  pred ArmRegR7 = ArmRegR6
  pred ArmRegR8 = ArmRegR7
  pred ArmRegR9 = ArmRegR8
  pred ArmRegSb = ArmRegR8
  pred ArmRegR10 = ArmRegR9
  pred ArmRegSl = ArmRegR9
  pred ArmRegR11 = ArmRegR10
  pred ArmRegFp = ArmRegR10
  pred ArmRegR12 = ArmRegR11
  pred ArmRegIp = ArmRegR11
  pred ArmRegS0 = ArmRegR12
  pred ArmRegS1 = ArmRegS0
  pred ArmRegS2 = ArmRegS1
  pred ArmRegS3 = ArmRegS2
  pred ArmRegS4 = ArmRegS3
  pred ArmRegS5 = ArmRegS4
  pred ArmRegS6 = ArmRegS5
  pred ArmRegS7 = ArmRegS6
  pred ArmRegS8 = ArmRegS7
  pred ArmRegS9 = ArmRegS8
  pred ArmRegS10 = ArmRegS9
  pred ArmRegS11 = ArmRegS10
  pred ArmRegS12 = ArmRegS11
  pred ArmRegS13 = ArmRegS12
  pred ArmRegS14 = ArmRegS13
  pred ArmRegS15 = ArmRegS14
  pred ArmRegS16 = ArmRegS15
  pred ArmRegS17 = ArmRegS16
  pred ArmRegS18 = ArmRegS17
  pred ArmRegS19 = ArmRegS18
  pred ArmRegS20 = ArmRegS19
  pred ArmRegS21 = ArmRegS20
  pred ArmRegS22 = ArmRegS21
  pred ArmRegS23 = ArmRegS22
  pred ArmRegS24 = ArmRegS23
  pred ArmRegS25 = ArmRegS24
  pred ArmRegS26 = ArmRegS25
  pred ArmRegS27 = ArmRegS26
  pred ArmRegS28 = ArmRegS27
  pred ArmRegS29 = ArmRegS28
  pred ArmRegS30 = ArmRegS29
  pred ArmRegS31 = ArmRegS30
  pred ArmRegEnding = ArmRegS31
  pred ArmRegInvalid = error "ArmReg.pred: ArmRegInvalid 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 ArmRegEnding

  fromEnum ArmRegInvalid = 0
  fromEnum ArmRegApsr = 1
  fromEnum ArmRegApsrNzcv = 2
  fromEnum ArmRegCpsr = 3
  fromEnum ArmRegFpexc = 4
  fromEnum ArmRegFpinst = 5
  fromEnum ArmRegFpscr = 6
  fromEnum ArmRegFpscrNzcv = 7
  fromEnum ArmRegFpsid = 8
  fromEnum ArmRegItstate = 9
  fromEnum ArmRegLr = 10
  fromEnum ArmRegR14 = 10
  fromEnum ArmRegPc = 11
  fromEnum ArmRegR15 = 11
  fromEnum ArmRegSp = 12
  fromEnum ArmRegR13 = 12
  fromEnum ArmRegSpsr = 13
  fromEnum ArmRegD0 = 14
  fromEnum ArmRegD1 = 15
  fromEnum ArmRegD2 = 16
  fromEnum ArmRegD3 = 17
  fromEnum ArmRegD4 = 18
  fromEnum ArmRegD5 = 19
  fromEnum ArmRegD6 = 20
  fromEnum ArmRegD7 = 21
  fromEnum ArmRegD8 = 22
  fromEnum ArmRegD9 = 23
  fromEnum ArmRegD10 = 24
  fromEnum ArmRegD11 = 25
  fromEnum ArmRegD12 = 26
  fromEnum ArmRegD13 = 27
  fromEnum ArmRegD14 = 28
  fromEnum ArmRegD15 = 29
  fromEnum ArmRegD16 = 30
  fromEnum ArmRegD17 = 31
  fromEnum ArmRegD18 = 32
  fromEnum ArmRegD19 = 33
  fromEnum ArmRegD20 = 34
  fromEnum ArmRegD21 = 35
  fromEnum ArmRegD22 = 36
  fromEnum ArmRegD23 = 37
  fromEnum ArmRegD24 = 38
  fromEnum ArmRegD25 = 39
  fromEnum ArmRegD26 = 40
  fromEnum ArmRegD27 = 41
  fromEnum ArmRegD28 = 42
  fromEnum ArmRegD29 = 43
  fromEnum ArmRegD30 = 44
  fromEnum ArmRegD31 = 45
  fromEnum ArmRegFpinst2 = 46
  fromEnum ArmRegMvfr0 = 47
  fromEnum ArmRegMvfr1 = 48
  fromEnum ArmRegMvfr2 = 49
  fromEnum ArmRegQ0 = 50
  fromEnum ArmRegQ1 = 51
  fromEnum ArmRegQ2 = 52
  fromEnum ArmRegQ3 = 53
  fromEnum ArmRegQ4 = 54
  fromEnum ArmRegQ5 = 55
  fromEnum ArmRegQ6 = 56
  fromEnum ArmRegQ7 = 57
  fromEnum ArmRegQ8 = 58
  fromEnum ArmRegQ9 = 59
  fromEnum ArmRegQ10 = 60
  fromEnum ArmRegQ11 = 61
  fromEnum ArmRegQ12 = 62
  fromEnum ArmRegQ13 = 63
  fromEnum ArmRegQ14 = 64
  fromEnum ArmRegQ15 = 65
  fromEnum ArmRegR0 = 66
  fromEnum ArmRegR1 = 67
  fromEnum ArmRegR2 = 68
  fromEnum ArmRegR3 = 69
  fromEnum ArmRegR4 = 70
  fromEnum ArmRegR5 = 71
  fromEnum ArmRegR6 = 72
  fromEnum ArmRegR7 = 73
  fromEnum ArmRegR8 = 74
  fromEnum ArmRegR9 = 75
  fromEnum ArmRegSb = 75
  fromEnum ArmRegR10 = 76
  fromEnum ArmRegSl = 76
  fromEnum ArmRegR11 = 77
  fromEnum ArmRegFp = 77
  fromEnum ArmRegR12 = 78
  fromEnum ArmRegIp = 78
  fromEnum ArmRegS0 = 79
  fromEnum ArmRegS1 = 80
  fromEnum ArmRegS2 = 81
  fromEnum ArmRegS3 = 82
  fromEnum ArmRegS4 = 83
  fromEnum ArmRegS5 = 84
  fromEnum ArmRegS6 = 85
  fromEnum ArmRegS7 = 86
  fromEnum ArmRegS8 = 87
  fromEnum ArmRegS9 = 88
  fromEnum ArmRegS10 = 89
  fromEnum ArmRegS11 = 90
  fromEnum ArmRegS12 = 91
  fromEnum ArmRegS13 = 92
  fromEnum ArmRegS14 = 93
  fromEnum ArmRegS15 = 94
  fromEnum ArmRegS16 = 95
  fromEnum ArmRegS17 = 96
  fromEnum ArmRegS18 = 97
  fromEnum ArmRegS19 = 98
  fromEnum ArmRegS20 = 99
  fromEnum ArmRegS21 = 100
  fromEnum ArmRegS22 = 101
  fromEnum ArmRegS23 = 102
  fromEnum ArmRegS24 = 103
  fromEnum ArmRegS25 = 104
  fromEnum ArmRegS26 = 105
  fromEnum ArmRegS27 = 106
  fromEnum ArmRegS28 = 107
  fromEnum ArmRegS29 = 108
  fromEnum ArmRegS30 = 109
  fromEnum ArmRegS31 = 110
  fromEnum ArmRegEnding = 111

  toEnum 0 = ArmRegInvalid
  toEnum 1 = ArmRegApsr
  toEnum 2 = ArmRegApsrNzcv
  toEnum 3 = ArmRegCpsr
  toEnum 4 = ArmRegFpexc
  toEnum 5 = ArmRegFpinst
  toEnum 6 = ArmRegFpscr
  toEnum 7 = ArmRegFpscrNzcv
  toEnum 8 = ArmRegFpsid
  toEnum 9 = ArmRegItstate
  toEnum 10 = ArmRegLr
  toEnum 11 = ArmRegPc
  toEnum 12 = ArmRegSp
  toEnum 13 = ArmRegSpsr
  toEnum 14 = ArmRegD0
  toEnum 15 = ArmRegD1
  toEnum 16 = ArmRegD2
  toEnum 17 = ArmRegD3
  toEnum 18 = ArmRegD4
  toEnum 19 = ArmRegD5
  toEnum 20 = ArmRegD6
  toEnum 21 = ArmRegD7
  toEnum 22 = ArmRegD8
  toEnum 23 = ArmRegD9
  toEnum 24 = ArmRegD10
  toEnum 25 = ArmRegD11
  toEnum 26 = ArmRegD12
  toEnum 27 = ArmRegD13
  toEnum 28 = ArmRegD14
  toEnum 29 = ArmRegD15
  toEnum 30 = ArmRegD16
  toEnum 31 = ArmRegD17
  toEnum 32 = ArmRegD18
  toEnum 33 = ArmRegD19
  toEnum 34 = ArmRegD20
  toEnum 35 = ArmRegD21
  toEnum 36 = ArmRegD22
  toEnum 37 = ArmRegD23
  toEnum 38 = ArmRegD24
  toEnum 39 = ArmRegD25
  toEnum 40 = ArmRegD26
  toEnum 41 = ArmRegD27
  toEnum 42 = ArmRegD28
  toEnum 43 = ArmRegD29
  toEnum 44 = ArmRegD30
  toEnum 45 = ArmRegD31
  toEnum 46 = ArmRegFpinst2
  toEnum 47 = ArmRegMvfr0
  toEnum 48 = ArmRegMvfr1
  toEnum 49 = ArmRegMvfr2
  toEnum 50 = ArmRegQ0
  toEnum 51 = ArmRegQ1
  toEnum 52 = ArmRegQ2
  toEnum 53 = ArmRegQ3
  toEnum 54 = ArmRegQ4
  toEnum 55 = ArmRegQ5
  toEnum 56 = ArmRegQ6
  toEnum 57 = ArmRegQ7
  toEnum 58 = ArmRegQ8
  toEnum 59 = ArmRegQ9
  toEnum 60 = ArmRegQ10
  toEnum 61 = ArmRegQ11
  toEnum 62 = ArmRegQ12
  toEnum 63 = ArmRegQ13
  toEnum 64 = ArmRegQ14
  toEnum 65 = ArmRegQ15
  toEnum 66 = ArmRegR0
  toEnum 67 = ArmRegR1
  toEnum 68 = ArmRegR2
  toEnum 69 = ArmRegR3
  toEnum 70 = ArmRegR4
  toEnum 71 = ArmRegR5
  toEnum 72 = ArmRegR6
  toEnum 73 = ArmRegR7
  toEnum 74 = ArmRegR8
  toEnum 75 = ArmRegR9
  toEnum 76 = ArmRegR10
  toEnum 77 = ArmRegR11
  toEnum 78 = ArmRegR12
  toEnum 79 = ArmRegS0
  toEnum 80 = ArmRegS1
  toEnum 81 = ArmRegS2
  toEnum 82 = ArmRegS3
  toEnum 83 = ArmRegS4
  toEnum 84 = ArmRegS5
  toEnum 85 = ArmRegS6
  toEnum 86 = ArmRegS7
  toEnum 87 = ArmRegS8
  toEnum 88 = ArmRegS9
  toEnum 89 = ArmRegS10
  toEnum 90 = ArmRegS11
  toEnum 91 = ArmRegS12
  toEnum 92 = ArmRegS13
  toEnum 93 = ArmRegS14
  toEnum 94 = ArmRegS15
  toEnum 95 = ArmRegS16
  toEnum 96 = ArmRegS17
  toEnum 97 = ArmRegS18
  toEnum 98 = ArmRegS19
  toEnum 99 = ArmRegS20
  toEnum 100 = ArmRegS21
  toEnum 101 = ArmRegS22
  toEnum 102 = ArmRegS23
  toEnum 103 = ArmRegS24
  toEnum 104 = ArmRegS25
  toEnum 105 = ArmRegS26
  toEnum 106 = ArmRegS27
  toEnum 107 = ArmRegS28
  toEnum 108 = ArmRegS29
  toEnum 109 = ArmRegS30
  toEnum 110 = ArmRegS31
  toEnum 111 = ArmRegEnding
  toEnum unmatched = error ("ArmReg.toEnum: Cannot match " ++ show unmatched)

{-# LINE 215 "src/Hapstone/Internal/Arm.chs" #-}

-- | ARM instructions
data ArmInsn = ArmInsInvalid
             | ArmInsAdc
             | ArmInsAdd
             | ArmInsAdr
             | ArmInsAesd
             | ArmInsAese
             | ArmInsAesimc
             | ArmInsAesmc
             | ArmInsAnd
             | ArmInsBfc
             | ArmInsBfi
             | ArmInsBic
             | ArmInsBkpt
             | ArmInsBl
             | ArmInsBlx
             | ArmInsBx
             | ArmInsBxj
             | ArmInsB
             | ArmInsCdp
             | ArmInsCdp2
             | ArmInsClrex
             | ArmInsClz
             | ArmInsCmn
             | ArmInsCmp
             | ArmInsCps
             | ArmInsCrc32b
             | ArmInsCrc32cb
             | ArmInsCrc32ch
             | ArmInsCrc32cw
             | ArmInsCrc32h
             | ArmInsCrc32w
             | ArmInsDbg
             | ArmInsDmb
             | ArmInsDsb
             | ArmInsEor
             | ArmInsVmov
             | ArmInsFldmdbx
             | ArmInsFldmiax
             | ArmInsVmrs
             | ArmInsFstmdbx
             | ArmInsFstmiax
             | ArmInsHint
             | ArmInsHlt
             | ArmInsIsb
             | ArmInsLda
             | ArmInsLdab
             | ArmInsLdaex
             | ArmInsLdaexb
             | ArmInsLdaexd
             | ArmInsLdaexh
             | ArmInsLdah
             | ArmInsLdc2l
             | ArmInsLdc2
             | ArmInsLdcl
             | ArmInsLdc
             | ArmInsLdmda
             | ArmInsLdmdb
             | ArmInsLdm
             | ArmInsLdmib
             | ArmInsLdrbt
             | ArmInsLdrb
             | ArmInsLdrd
             | ArmInsLdrex
             | ArmInsLdrexb
             | ArmInsLdrexd
             | ArmInsLdrexh
             | ArmInsLdrh
             | ArmInsLdrht
             | ArmInsLdrsb
             | ArmInsLdrsbt
             | ArmInsLdrsh
             | ArmInsLdrsht
             | ArmInsLdrt
             | ArmInsLdr
             | ArmInsMcr
             | ArmInsMcr2
             | ArmInsMcrr
             | ArmInsMcrr2
             | ArmInsMla
             | ArmInsMls
             | ArmInsMov
             | ArmInsMovt
             | ArmInsMovw
             | ArmInsMrc
             | ArmInsMrc2
             | ArmInsMrrc
             | ArmInsMrrc2
             | ArmInsMrs
             | ArmInsMsr
             | ArmInsMul
             | ArmInsMvn
             | ArmInsOrr
             | ArmInsPkhbt
             | ArmInsPkhtb
             | ArmInsPldw
             | ArmInsPld
             | ArmInsPli
             | ArmInsQadd
             | ArmInsQadd16
             | ArmInsQadd8
             | ArmInsQasx
             | ArmInsQdadd
             | ArmInsQdsub
             | ArmInsQsax
             | ArmInsQsub
             | ArmInsQsub16
             | ArmInsQsub8
             | ArmInsRbit
             | ArmInsRev
             | ArmInsRev16
             | ArmInsRevsh
             | ArmInsRfeda
             | ArmInsRfedb
             | ArmInsRfeia
             | ArmInsRfeib
             | ArmInsRsb
             | ArmInsRsc
             | ArmInsSadd16
             | ArmInsSadd8
             | ArmInsSasx
             | ArmInsSbc
             | ArmInsSbfx
             | ArmInsSdiv
             | ArmInsSel
             | ArmInsSetend
             | ArmInsSha1c
             | ArmInsSha1h
             | ArmInsSha1m
             | ArmInsSha1p
             | ArmInsSha1su0
             | ArmInsSha1su1
             | ArmInsSha256h
             | ArmInsSha256h2
             | ArmInsSha256su0
             | ArmInsSha256su1
             | ArmInsShadd16
             | ArmInsShadd8
             | ArmInsShasx
             | ArmInsShsax
             | ArmInsShsub16
             | ArmInsShsub8
             | ArmInsSmc
             | ArmInsSmlabb
             | ArmInsSmlabt
             | ArmInsSmlad
             | ArmInsSmladx
             | ArmInsSmlal
             | ArmInsSmlalbb
             | ArmInsSmlalbt
             | ArmInsSmlald
             | ArmInsSmlaldx
             | ArmInsSmlaltb
             | ArmInsSmlaltt
             | ArmInsSmlatb
             | ArmInsSmlatt
             | ArmInsSmlawb
             | ArmInsSmlawt
             | ArmInsSmlsd
             | ArmInsSmlsdx
             | ArmInsSmlsld
             | ArmInsSmlsldx
             | ArmInsSmmla
             | ArmInsSmmlar
             | ArmInsSmmls
             | ArmInsSmmlsr
             | ArmInsSmmul
             | ArmInsSmmulr
             | ArmInsSmuad
             | ArmInsSmuadx
             | ArmInsSmulbb
             | ArmInsSmulbt
             | ArmInsSmull
             | ArmInsSmultb
             | ArmInsSmultt
             | ArmInsSmulwb
             | ArmInsSmulwt
             | ArmInsSmusd
             | ArmInsSmusdx
             | ArmInsSrsda
             | ArmInsSrsdb
             | ArmInsSrsia
             | ArmInsSrsib
             | ArmInsSsat
             | ArmInsSsat16
             | ArmInsSsax
             | ArmInsSsub16
             | ArmInsSsub8
             | ArmInsStc2l
             | ArmInsStc2
             | ArmInsStcl
             | ArmInsStc
             | ArmInsStl
             | ArmInsStlb
             | ArmInsStlex
             | ArmInsStlexb
             | ArmInsStlexd
             | ArmInsStlexh
             | ArmInsStlh
             | ArmInsStmda
             | ArmInsStmdb
             | ArmInsStm
             | ArmInsStmib
             | ArmInsStrbt
             | ArmInsStrb
             | ArmInsStrd
             | ArmInsStrex
             | ArmInsStrexb
             | ArmInsStrexd
             | ArmInsStrexh
             | ArmInsStrh
             | ArmInsStrht
             | ArmInsStrt
             | ArmInsStr
             | ArmInsSub
             | ArmInsSvc
             | ArmInsSwp
             | ArmInsSwpb
             | ArmInsSxtab
             | ArmInsSxtab16
             | ArmInsSxtah
             | ArmInsSxtb
             | ArmInsSxtb16
             | ArmInsSxth
             | ArmInsTeq
             | ArmInsTrap
             | ArmInsTst
             | ArmInsUadd16
             | ArmInsUadd8
             | ArmInsUasx
             | ArmInsUbfx
             | ArmInsUdf
             | ArmInsUdiv
             | ArmInsUhadd16
             | ArmInsUhadd8
             | ArmInsUhasx
             | ArmInsUhsax
             | ArmInsUhsub16
             | ArmInsUhsub8
             | ArmInsUmaal
             | ArmInsUmlal
             | ArmInsUmull
             | ArmInsUqadd16
             | ArmInsUqadd8
             | ArmInsUqasx
             | ArmInsUqsax
             | ArmInsUqsub16
             | ArmInsUqsub8
             | ArmInsUsad8
             | ArmInsUsada8
             | ArmInsUsat
             | ArmInsUsat16
             | ArmInsUsax
             | ArmInsUsub16
             | ArmInsUsub8
             | ArmInsUxtab
             | ArmInsUxtab16
             | ArmInsUxtah
             | ArmInsUxtb
             | ArmInsUxtb16
             | ArmInsUxth
             | ArmInsVabal
             | ArmInsVaba
             | ArmInsVabdl
             | ArmInsVabd
             | ArmInsVabs
             | ArmInsVacge
             | ArmInsVacgt
             | ArmInsVadd
             | ArmInsVaddhn
             | ArmInsVaddl
             | ArmInsVaddw
             | ArmInsVand
             | ArmInsVbic
             | ArmInsVbif
             | ArmInsVbit
             | ArmInsVbsl
             | ArmInsVceq
             | ArmInsVcge
             | ArmInsVcgt
             | ArmInsVcle
             | ArmInsVcls
             | ArmInsVclt
             | ArmInsVclz
             | ArmInsVcmp
             | ArmInsVcmpe
             | ArmInsVcnt
             | ArmInsVcvta
             | ArmInsVcvtb
             | ArmInsVcvt
             | ArmInsVcvtm
             | ArmInsVcvtn
             | ArmInsVcvtp
             | ArmInsVcvtt
             | ArmInsVdiv
             | ArmInsVdup
             | ArmInsVeor
             | ArmInsVext
             | ArmInsVfma
             | ArmInsVfms
             | ArmInsVfnma
             | ArmInsVfnms
             | ArmInsVhadd
             | ArmInsVhsub
             | ArmInsVld1
             | ArmInsVld2
             | ArmInsVld3
             | ArmInsVld4
             | ArmInsVldmdb
             | ArmInsVldmia
             | ArmInsVldr
             | ArmInsVmaxnm
             | ArmInsVmax
             | ArmInsVminnm
             | ArmInsVmin
             | ArmInsVmla
             | ArmInsVmlal
             | ArmInsVmls
             | ArmInsVmlsl
             | ArmInsVmovl
             | ArmInsVmovn
             | ArmInsVmsr
             | ArmInsVmul
             | ArmInsVmull
             | ArmInsVmvn
             | ArmInsVneg
             | ArmInsVnmla
             | ArmInsVnmls
             | ArmInsVnmul
             | ArmInsVorn
             | ArmInsVorr
             | ArmInsVpadal
             | ArmInsVpaddl
             | ArmInsVpadd
             | ArmInsVpmax
             | ArmInsVpmin
             | ArmInsVqabs
             | ArmInsVqadd
             | ArmInsVqdmlal
             | ArmInsVqdmlsl
             | ArmInsVqdmulh
             | ArmInsVqdmull
             | ArmInsVqmovun
             | ArmInsVqmovn
             | ArmInsVqneg
             | ArmInsVqrdmulh
             | ArmInsVqrshl
             | ArmInsVqrshrn
             | ArmInsVqrshrun
             | ArmInsVqshl
             | ArmInsVqshlu
             | ArmInsVqshrn
             | ArmInsVqshrun
             | ArmInsVqsub
             | ArmInsVraddhn
             | ArmInsVrecpe
             | ArmInsVrecps
             | ArmInsVrev16
             | ArmInsVrev32
             | ArmInsVrev64
             | ArmInsVrhadd
             | ArmInsVrinta
             | ArmInsVrintm
             | ArmInsVrintn
             | ArmInsVrintp
             | ArmInsVrintr
             | ArmInsVrintx
             | ArmInsVrintz
             | ArmInsVrshl
             | ArmInsVrshrn
             | ArmInsVrshr
             | ArmInsVrsqrte
             | ArmInsVrsqrts
             | ArmInsVrsra
             | ArmInsVrsubhn
             | ArmInsVseleq
             | ArmInsVselge
             | ArmInsVselgt
             | ArmInsVselvs
             | ArmInsVshll
             | ArmInsVshl
             | ArmInsVshrn
             | ArmInsVshr
             | ArmInsVsli
             | ArmInsVsqrt
             | ArmInsVsra
             | ArmInsVsri
             | ArmInsVst1
             | ArmInsVst2
             | ArmInsVst3
             | ArmInsVst4
             | ArmInsVstmdb
             | ArmInsVstmia
             | ArmInsVstr
             | ArmInsVsub
             | ArmInsVsubhn
             | ArmInsVsubl
             | ArmInsVsubw
             | ArmInsVswp
             | ArmInsVtbl
             | ArmInsVtbx
             | ArmInsVcvtr
             | ArmInsVtrn
             | ArmInsVtst
             | ArmInsVuzp
             | ArmInsVzip
             | ArmInsAddw
             | ArmInsAsr
             | ArmInsDcps1
             | ArmInsDcps2
             | ArmInsDcps3
             | ArmInsIt
             | ArmInsLsl
             | ArmInsLsr
             | ArmInsAsrs
             | ArmInsLsrs
             | ArmInsOrn
             | ArmInsRor
             | ArmInsRrx
             | ArmInsSubs
             | ArmInsSubw
             | ArmInsTbb
             | ArmInsTbh
             | ArmInsCbnz
             | ArmInsCbz
             | ArmInsMovs
             | ArmInsPop
             | ArmInsPush
             | ArmInsNop
             | ArmInsYield
             | ArmInsWfe
             | ArmInsWfi
             | ArmInsSev
             | ArmInsSevl
             | ArmInsVpush
             | ArmInsVpop
             | ArmInsEnding
  deriving (Show,Eq,Bounded)
instance Enum ArmInsn where
  succ ArmInsInvalid = ArmInsAdc
  succ ArmInsAdc = ArmInsAdd
  succ ArmInsAdd = ArmInsAdr
  succ ArmInsAdr = ArmInsAesd
  succ ArmInsAesd = ArmInsAese
  succ ArmInsAese = ArmInsAesimc
  succ ArmInsAesimc = ArmInsAesmc
  succ ArmInsAesmc = ArmInsAnd
  succ ArmInsAnd = ArmInsBfc
  succ ArmInsBfc = ArmInsBfi
  succ ArmInsBfi = ArmInsBic
  succ ArmInsBic = ArmInsBkpt
  succ ArmInsBkpt = ArmInsBl
  succ ArmInsBl = ArmInsBlx
  succ ArmInsBlx = ArmInsBx
  succ ArmInsBx = ArmInsBxj
  succ ArmInsBxj = ArmInsB
  succ ArmInsB = ArmInsCdp
  succ ArmInsCdp = ArmInsCdp2
  succ ArmInsCdp2 = ArmInsClrex
  succ ArmInsClrex = ArmInsClz
  succ ArmInsClz = ArmInsCmn
  succ ArmInsCmn = ArmInsCmp
  succ ArmInsCmp = ArmInsCps
  succ ArmInsCps = ArmInsCrc32b
  succ ArmInsCrc32b = ArmInsCrc32cb
  succ ArmInsCrc32cb = ArmInsCrc32ch
  succ ArmInsCrc32ch = ArmInsCrc32cw
  succ ArmInsCrc32cw = ArmInsCrc32h
  succ ArmInsCrc32h = ArmInsCrc32w
  succ ArmInsCrc32w = ArmInsDbg
  succ ArmInsDbg = ArmInsDmb
  succ ArmInsDmb = ArmInsDsb
  succ ArmInsDsb = ArmInsEor
  succ ArmInsEor = ArmInsVmov
  succ ArmInsVmov = ArmInsFldmdbx
  succ ArmInsFldmdbx = ArmInsFldmiax
  succ ArmInsFldmiax = ArmInsVmrs
  succ ArmInsVmrs = ArmInsFstmdbx
  succ ArmInsFstmdbx = ArmInsFstmiax
  succ ArmInsFstmiax = ArmInsHint
  succ ArmInsHint = ArmInsHlt
  succ ArmInsHlt = ArmInsIsb
  succ ArmInsIsb = ArmInsLda
  succ ArmInsLda = ArmInsLdab
  succ ArmInsLdab = ArmInsLdaex
  succ ArmInsLdaex = ArmInsLdaexb
  succ ArmInsLdaexb = ArmInsLdaexd
  succ ArmInsLdaexd = ArmInsLdaexh
  succ ArmInsLdaexh = ArmInsLdah
  succ ArmInsLdah = ArmInsLdc2l
  succ ArmInsLdc2l = ArmInsLdc2
  succ ArmInsLdc2 = ArmInsLdcl
  succ ArmInsLdcl = ArmInsLdc
  succ ArmInsLdc = ArmInsLdmda
  succ ArmInsLdmda = ArmInsLdmdb
  succ ArmInsLdmdb = ArmInsLdm
  succ ArmInsLdm = ArmInsLdmib
  succ ArmInsLdmib = ArmInsLdrbt
  succ ArmInsLdrbt = ArmInsLdrb
  succ ArmInsLdrb = ArmInsLdrd
  succ ArmInsLdrd = ArmInsLdrex
  succ ArmInsLdrex = ArmInsLdrexb
  succ ArmInsLdrexb = ArmInsLdrexd
  succ ArmInsLdrexd = ArmInsLdrexh
  succ ArmInsLdrexh = ArmInsLdrh
  succ ArmInsLdrh = ArmInsLdrht
  succ ArmInsLdrht = ArmInsLdrsb
  succ ArmInsLdrsb = ArmInsLdrsbt
  succ ArmInsLdrsbt = ArmInsLdrsh
  succ ArmInsLdrsh = ArmInsLdrsht
  succ ArmInsLdrsht = ArmInsLdrt
  succ ArmInsLdrt = ArmInsLdr
  succ ArmInsLdr = ArmInsMcr
  succ ArmInsMcr = ArmInsMcr2
  succ ArmInsMcr2 = ArmInsMcrr
  succ ArmInsMcrr = ArmInsMcrr2
  succ ArmInsMcrr2 = ArmInsMla
  succ ArmInsMla = ArmInsMls
  succ ArmInsMls = ArmInsMov
  succ ArmInsMov = ArmInsMovt
  succ ArmInsMovt = ArmInsMovw
  succ ArmInsMovw = ArmInsMrc
  succ ArmInsMrc = ArmInsMrc2
  succ ArmInsMrc2 = ArmInsMrrc
  succ ArmInsMrrc = ArmInsMrrc2
  succ ArmInsMrrc2 = ArmInsMrs
  succ ArmInsMrs = ArmInsMsr
  succ ArmInsMsr = ArmInsMul
  succ ArmInsMul = ArmInsMvn
  succ ArmInsMvn = ArmInsOrr
  succ ArmInsOrr = ArmInsPkhbt
  succ ArmInsPkhbt = ArmInsPkhtb
  succ ArmInsPkhtb = ArmInsPldw
  succ ArmInsPldw = ArmInsPld
  succ ArmInsPld = ArmInsPli
  succ ArmInsPli = ArmInsQadd
  succ ArmInsQadd = ArmInsQadd16
  succ ArmInsQadd16 = ArmInsQadd8
  succ ArmInsQadd8 = ArmInsQasx
  succ ArmInsQasx = ArmInsQdadd
  succ ArmInsQdadd = ArmInsQdsub
  succ ArmInsQdsub = ArmInsQsax
  succ ArmInsQsax = ArmInsQsub
  succ ArmInsQsub = ArmInsQsub16
  succ ArmInsQsub16 = ArmInsQsub8
  succ ArmInsQsub8 = ArmInsRbit
  succ ArmInsRbit = ArmInsRev
  succ ArmInsRev = ArmInsRev16
  succ ArmInsRev16 = ArmInsRevsh
  succ ArmInsRevsh = ArmInsRfeda
  succ ArmInsRfeda = ArmInsRfedb
  succ ArmInsRfedb = ArmInsRfeia
  succ ArmInsRfeia = ArmInsRfeib
  succ ArmInsRfeib = ArmInsRsb
  succ ArmInsRsb = ArmInsRsc
  succ ArmInsRsc = ArmInsSadd16
  succ ArmInsSadd16 = ArmInsSadd8
  succ ArmInsSadd8 = ArmInsSasx
  succ ArmInsSasx = ArmInsSbc
  succ ArmInsSbc = ArmInsSbfx
  succ ArmInsSbfx = ArmInsSdiv
  succ ArmInsSdiv = ArmInsSel
  succ ArmInsSel = ArmInsSetend
  succ ArmInsSetend = ArmInsSha1c
  succ ArmInsSha1c = ArmInsSha1h
  succ ArmInsSha1h = ArmInsSha1m
  succ ArmInsSha1m = ArmInsSha1p
  succ ArmInsSha1p = ArmInsSha1su0
  succ ArmInsSha1su0 = ArmInsSha1su1
  succ ArmInsSha1su1 = ArmInsSha256h
  succ ArmInsSha256h = ArmInsSha256h2
  succ ArmInsSha256h2 = ArmInsSha256su0
  succ ArmInsSha256su0 = ArmInsSha256su1
  succ ArmInsSha256su1 = ArmInsShadd16
  succ ArmInsShadd16 = ArmInsShadd8
  succ ArmInsShadd8 = ArmInsShasx
  succ ArmInsShasx = ArmInsShsax
  succ ArmInsShsax = ArmInsShsub16
  succ ArmInsShsub16 = ArmInsShsub8
  succ ArmInsShsub8 = ArmInsSmc
  succ ArmInsSmc = ArmInsSmlabb
  succ ArmInsSmlabb = ArmInsSmlabt
  succ ArmInsSmlabt = ArmInsSmlad
  succ ArmInsSmlad = ArmInsSmladx
  succ ArmInsSmladx = ArmInsSmlal
  succ ArmInsSmlal = ArmInsSmlalbb
  succ ArmInsSmlalbb = ArmInsSmlalbt
  succ ArmInsSmlalbt = ArmInsSmlald
  succ ArmInsSmlald = ArmInsSmlaldx
  succ ArmInsSmlaldx = ArmInsSmlaltb
  succ ArmInsSmlaltb = ArmInsSmlaltt
  succ ArmInsSmlaltt = ArmInsSmlatb
  succ ArmInsSmlatb = ArmInsSmlatt
  succ ArmInsSmlatt = ArmInsSmlawb
  succ ArmInsSmlawb = ArmInsSmlawt
  succ ArmInsSmlawt = ArmInsSmlsd
  succ ArmInsSmlsd = ArmInsSmlsdx
  succ ArmInsSmlsdx = ArmInsSmlsld
  succ ArmInsSmlsld = ArmInsSmlsldx
  succ ArmInsSmlsldx = ArmInsSmmla
  succ ArmInsSmmla = ArmInsSmmlar
  succ ArmInsSmmlar = ArmInsSmmls
  succ ArmInsSmmls = ArmInsSmmlsr
  succ ArmInsSmmlsr = ArmInsSmmul
  succ ArmInsSmmul = ArmInsSmmulr
  succ ArmInsSmmulr = ArmInsSmuad
  succ ArmInsSmuad = ArmInsSmuadx
  succ ArmInsSmuadx = ArmInsSmulbb
  succ ArmInsSmulbb = ArmInsSmulbt
  succ ArmInsSmulbt = ArmInsSmull
  succ ArmInsSmull = ArmInsSmultb
  succ ArmInsSmultb = ArmInsSmultt
  succ ArmInsSmultt = ArmInsSmulwb
  succ ArmInsSmulwb = ArmInsSmulwt
  succ ArmInsSmulwt = ArmInsSmusd
  succ ArmInsSmusd = ArmInsSmusdx
  succ ArmInsSmusdx = ArmInsSrsda
  succ ArmInsSrsda = ArmInsSrsdb
  succ ArmInsSrsdb = ArmInsSrsia
  succ ArmInsSrsia = ArmInsSrsib
  succ ArmInsSrsib = ArmInsSsat
  succ ArmInsSsat = ArmInsSsat16
  succ ArmInsSsat16 = ArmInsSsax
  succ ArmInsSsax = ArmInsSsub16
  succ ArmInsSsub16 = ArmInsSsub8
  succ ArmInsSsub8 = ArmInsStc2l
  succ ArmInsStc2l = ArmInsStc2
  succ ArmInsStc2 = ArmInsStcl
  succ ArmInsStcl = ArmInsStc
  succ ArmInsStc = ArmInsStl
  succ ArmInsStl = ArmInsStlb
  succ ArmInsStlb = ArmInsStlex
  succ ArmInsStlex = ArmInsStlexb
  succ ArmInsStlexb = ArmInsStlexd
  succ ArmInsStlexd = ArmInsStlexh
  succ ArmInsStlexh = ArmInsStlh
  succ ArmInsStlh = ArmInsStmda
  succ ArmInsStmda = ArmInsStmdb
  succ ArmInsStmdb = ArmInsStm
  succ ArmInsStm = ArmInsStmib
  succ ArmInsStmib = ArmInsStrbt
  succ ArmInsStrbt = ArmInsStrb
  succ ArmInsStrb = ArmInsStrd
  succ ArmInsStrd = ArmInsStrex
  succ ArmInsStrex = ArmInsStrexb
  succ ArmInsStrexb = ArmInsStrexd
  succ ArmInsStrexd = ArmInsStrexh
  succ ArmInsStrexh = ArmInsStrh
  succ ArmInsStrh = ArmInsStrht
  succ ArmInsStrht = ArmInsStrt
  succ ArmInsStrt = ArmInsStr
  succ ArmInsStr = ArmInsSub
  succ ArmInsSub = ArmInsSvc
  succ ArmInsSvc = ArmInsSwp
  succ ArmInsSwp = ArmInsSwpb
  succ ArmInsSwpb = ArmInsSxtab
  succ ArmInsSxtab = ArmInsSxtab16
  succ ArmInsSxtab16 = ArmInsSxtah
  succ ArmInsSxtah = ArmInsSxtb
  succ ArmInsSxtb = ArmInsSxtb16
  succ ArmInsSxtb16 = ArmInsSxth
  succ ArmInsSxth = ArmInsTeq
  succ ArmInsTeq = ArmInsTrap
  succ ArmInsTrap = ArmInsTst
  succ ArmInsTst = ArmInsUadd16
  succ ArmInsUadd16 = ArmInsUadd8
  succ ArmInsUadd8 = ArmInsUasx
  succ ArmInsUasx = ArmInsUbfx
  succ ArmInsUbfx = ArmInsUdf
  succ ArmInsUdf = ArmInsUdiv
  succ ArmInsUdiv = ArmInsUhadd16
  succ ArmInsUhadd16 = ArmInsUhadd8
  succ ArmInsUhadd8 = ArmInsUhasx
  succ ArmInsUhasx = ArmInsUhsax
  succ ArmInsUhsax = ArmInsUhsub16
  succ ArmInsUhsub16 = ArmInsUhsub8
  succ ArmInsUhsub8 = ArmInsUmaal
  succ ArmInsUmaal = ArmInsUmlal
  succ ArmInsUmlal = ArmInsUmull
  succ ArmInsUmull = ArmInsUqadd16
  succ ArmInsUqadd16 = ArmInsUqadd8
  succ ArmInsUqadd8 = ArmInsUqasx
  succ ArmInsUqasx = ArmInsUqsax
  succ ArmInsUqsax = ArmInsUqsub16
  succ ArmInsUqsub16 = ArmInsUqsub8
  succ ArmInsUqsub8 = ArmInsUsad8
  succ ArmInsUsad8 = ArmInsUsada8
  succ ArmInsUsada8 = ArmInsUsat
  succ ArmInsUsat = ArmInsUsat16
  succ ArmInsUsat16 = ArmInsUsax
  succ ArmInsUsax = ArmInsUsub16
  succ ArmInsUsub16 = ArmInsUsub8
  succ ArmInsUsub8 = ArmInsUxtab
  succ ArmInsUxtab = ArmInsUxtab16
  succ ArmInsUxtab16 = ArmInsUxtah
  succ ArmInsUxtah = ArmInsUxtb
  succ ArmInsUxtb = ArmInsUxtb16
  succ ArmInsUxtb16 = ArmInsUxth
  succ ArmInsUxth = ArmInsVabal
  succ ArmInsVabal = ArmInsVaba
  succ ArmInsVaba = ArmInsVabdl
  succ ArmInsVabdl = ArmInsVabd
  succ ArmInsVabd = ArmInsVabs
  succ ArmInsVabs = ArmInsVacge
  succ ArmInsVacge = ArmInsVacgt
  succ ArmInsVacgt = ArmInsVadd
  succ ArmInsVadd = ArmInsVaddhn
  succ ArmInsVaddhn = ArmInsVaddl
  succ ArmInsVaddl = ArmInsVaddw
  succ ArmInsVaddw = ArmInsVand
  succ ArmInsVand = ArmInsVbic
  succ ArmInsVbic = ArmInsVbif
  succ ArmInsVbif = ArmInsVbit
  succ ArmInsVbit = ArmInsVbsl
  succ ArmInsVbsl = ArmInsVceq
  succ ArmInsVceq = ArmInsVcge
  succ ArmInsVcge = ArmInsVcgt
  succ ArmInsVcgt = ArmInsVcle
  succ ArmInsVcle = ArmInsVcls
  succ ArmInsVcls = ArmInsVclt
  succ ArmInsVclt = ArmInsVclz
  succ ArmInsVclz = ArmInsVcmp
  succ ArmInsVcmp = ArmInsVcmpe
  succ ArmInsVcmpe = ArmInsVcnt
  succ ArmInsVcnt = ArmInsVcvta
  succ ArmInsVcvta = ArmInsVcvtb
  succ ArmInsVcvtb = ArmInsVcvt
  succ ArmInsVcvt = ArmInsVcvtm
  succ ArmInsVcvtm = ArmInsVcvtn
  succ ArmInsVcvtn = ArmInsVcvtp
  succ ArmInsVcvtp = ArmInsVcvtt
  succ ArmInsVcvtt = ArmInsVdiv
  succ ArmInsVdiv = ArmInsVdup
  succ ArmInsVdup = ArmInsVeor
  succ ArmInsVeor = ArmInsVext
  succ ArmInsVext = ArmInsVfma
  succ ArmInsVfma = ArmInsVfms
  succ ArmInsVfms = ArmInsVfnma
  succ ArmInsVfnma = ArmInsVfnms
  succ ArmInsVfnms = ArmInsVhadd
  succ ArmInsVhadd = ArmInsVhsub
  succ ArmInsVhsub = ArmInsVld1
  succ ArmInsVld1 = ArmInsVld2
  succ ArmInsVld2 = ArmInsVld3
  succ ArmInsVld3 = ArmInsVld4
  succ ArmInsVld4 = ArmInsVldmdb
  succ ArmInsVldmdb = ArmInsVldmia
  succ ArmInsVldmia = ArmInsVldr
  succ ArmInsVldr = ArmInsVmaxnm
  succ ArmInsVmaxnm = ArmInsVmax
  succ ArmInsVmax = ArmInsVminnm
  succ ArmInsVminnm = ArmInsVmin
  succ ArmInsVmin = ArmInsVmla
  succ ArmInsVmla = ArmInsVmlal
  succ ArmInsVmlal = ArmInsVmls
  succ ArmInsVmls = ArmInsVmlsl
  succ ArmInsVmlsl = ArmInsVmovl
  succ ArmInsVmovl = ArmInsVmovn
  succ ArmInsVmovn = ArmInsVmsr
  succ ArmInsVmsr = ArmInsVmul
  succ ArmInsVmul = ArmInsVmull
  succ ArmInsVmull = ArmInsVmvn
  succ ArmInsVmvn = ArmInsVneg
  succ ArmInsVneg = ArmInsVnmla
  succ ArmInsVnmla = ArmInsVnmls
  succ ArmInsVnmls = ArmInsVnmul
  succ ArmInsVnmul = ArmInsVorn
  succ ArmInsVorn = ArmInsVorr
  succ ArmInsVorr = ArmInsVpadal
  succ ArmInsVpadal = ArmInsVpaddl
  succ ArmInsVpaddl = ArmInsVpadd
  succ ArmInsVpadd = ArmInsVpmax
  succ ArmInsVpmax = ArmInsVpmin
  succ ArmInsVpmin = ArmInsVqabs
  succ ArmInsVqabs = ArmInsVqadd
  succ ArmInsVqadd = ArmInsVqdmlal
  succ ArmInsVqdmlal = ArmInsVqdmlsl
  succ ArmInsVqdmlsl = ArmInsVqdmulh
  succ ArmInsVqdmulh = ArmInsVqdmull
  succ ArmInsVqdmull = ArmInsVqmovun
  succ ArmInsVqmovun = ArmInsVqmovn
  succ ArmInsVqmovn = ArmInsVqneg
  succ ArmInsVqneg = ArmInsVqrdmulh
  succ ArmInsVqrdmulh = ArmInsVqrshl
  succ ArmInsVqrshl = ArmInsVqrshrn
  succ ArmInsVqrshrn = ArmInsVqrshrun
  succ ArmInsVqrshrun = ArmInsVqshl
  succ ArmInsVqshl = ArmInsVqshlu
  succ ArmInsVqshlu = ArmInsVqshrn
  succ ArmInsVqshrn = ArmInsVqshrun
  succ ArmInsVqshrun = ArmInsVqsub
  succ ArmInsVqsub = ArmInsVraddhn
  succ ArmInsVraddhn = ArmInsVrecpe
  succ ArmInsVrecpe = ArmInsVrecps
  succ ArmInsVrecps = ArmInsVrev16
  succ ArmInsVrev16 = ArmInsVrev32
  succ ArmInsVrev32 = ArmInsVrev64
  succ ArmInsVrev64 = ArmInsVrhadd
  succ ArmInsVrhadd = ArmInsVrinta
  succ ArmInsVrinta = ArmInsVrintm
  succ ArmInsVrintm = ArmInsVrintn
  succ ArmInsVrintn = ArmInsVrintp
  succ ArmInsVrintp = ArmInsVrintr
  succ ArmInsVrintr = ArmInsVrintx
  succ ArmInsVrintx = ArmInsVrintz
  succ ArmInsVrintz = ArmInsVrshl
  succ ArmInsVrshl = ArmInsVrshrn
  succ ArmInsVrshrn = ArmInsVrshr
  succ ArmInsVrshr = ArmInsVrsqrte
  succ ArmInsVrsqrte = ArmInsVrsqrts
  succ ArmInsVrsqrts = ArmInsVrsra
  succ ArmInsVrsra = ArmInsVrsubhn
  succ ArmInsVrsubhn = ArmInsVseleq
  succ ArmInsVseleq = ArmInsVselge
  succ ArmInsVselge = ArmInsVselgt
  succ ArmInsVselgt = ArmInsVselvs
  succ ArmInsVselvs = ArmInsVshll
  succ ArmInsVshll = ArmInsVshl
  succ ArmInsVshl = ArmInsVshrn
  succ ArmInsVshrn = ArmInsVshr
  succ ArmInsVshr = ArmInsVsli
  succ ArmInsVsli = ArmInsVsqrt
  succ ArmInsVsqrt = ArmInsVsra
  succ ArmInsVsra = ArmInsVsri
  succ ArmInsVsri = ArmInsVst1
  succ ArmInsVst1 = ArmInsVst2
  succ ArmInsVst2 = ArmInsVst3
  succ ArmInsVst3 = ArmInsVst4
  succ ArmInsVst4 = ArmInsVstmdb
  succ ArmInsVstmdb = ArmInsVstmia
  succ ArmInsVstmia = ArmInsVstr
  succ ArmInsVstr = ArmInsVsub
  succ ArmInsVsub = ArmInsVsubhn
  succ ArmInsVsubhn = ArmInsVsubl
  succ ArmInsVsubl = ArmInsVsubw
  succ ArmInsVsubw = ArmInsVswp
  succ ArmInsVswp = ArmInsVtbl
  succ ArmInsVtbl = ArmInsVtbx
  succ ArmInsVtbx = ArmInsVcvtr
  succ ArmInsVcvtr = ArmInsVtrn
  succ ArmInsVtrn = ArmInsVtst
  succ ArmInsVtst = ArmInsVuzp
  succ ArmInsVuzp = ArmInsVzip
  succ ArmInsVzip = ArmInsAddw
  succ ArmInsAddw = ArmInsAsr
  succ ArmInsAsr = ArmInsDcps1
  succ ArmInsDcps1 = ArmInsDcps2
  succ ArmInsDcps2 = ArmInsDcps3
  succ ArmInsDcps3 = ArmInsIt
  succ ArmInsIt = ArmInsLsl
  succ ArmInsLsl = ArmInsLsr
  succ ArmInsLsr = ArmInsAsrs
  succ ArmInsAsrs = ArmInsLsrs
  succ ArmInsLsrs = ArmInsOrn
  succ ArmInsOrn = ArmInsRor
  succ ArmInsRor = ArmInsRrx
  succ ArmInsRrx = ArmInsSubs
  succ ArmInsSubs = ArmInsSubw
  succ ArmInsSubw = ArmInsTbb
  succ ArmInsTbb = ArmInsTbh
  succ ArmInsTbh = ArmInsCbnz
  succ ArmInsCbnz = ArmInsCbz
  succ ArmInsCbz = ArmInsMovs
  succ ArmInsMovs = ArmInsPop
  succ ArmInsPop = ArmInsPush
  succ ArmInsPush = ArmInsNop
  succ ArmInsNop = ArmInsYield
  succ ArmInsYield = ArmInsWfe
  succ ArmInsWfe = ArmInsWfi
  succ ArmInsWfi = ArmInsSev
  succ ArmInsSev = ArmInsSevl
  succ ArmInsSevl = ArmInsVpush
  succ ArmInsVpush = ArmInsVpop
  succ ArmInsVpop = ArmInsEnding
  succ ArmInsEnding = error "ArmInsn.succ: ArmInsEnding has no successor"

  pred ArmInsAdc = ArmInsInvalid
  pred ArmInsAdd = ArmInsAdc
  pred ArmInsAdr = ArmInsAdd
  pred ArmInsAesd = ArmInsAdr
  pred ArmInsAese = ArmInsAesd
  pred ArmInsAesimc = ArmInsAese
  pred ArmInsAesmc = ArmInsAesimc
  pred ArmInsAnd = ArmInsAesmc
  pred ArmInsBfc = ArmInsAnd
  pred ArmInsBfi = ArmInsBfc
  pred ArmInsBic = ArmInsBfi
  pred ArmInsBkpt = ArmInsBic
  pred ArmInsBl = ArmInsBkpt
  pred ArmInsBlx = ArmInsBl
  pred ArmInsBx = ArmInsBlx
  pred ArmInsBxj = ArmInsBx
  pred ArmInsB = ArmInsBxj
  pred ArmInsCdp = ArmInsB
  pred ArmInsCdp2 = ArmInsCdp
  pred ArmInsClrex = ArmInsCdp2
  pred ArmInsClz = ArmInsClrex
  pred ArmInsCmn = ArmInsClz
  pred ArmInsCmp = ArmInsCmn
  pred ArmInsCps = ArmInsCmp
  pred ArmInsCrc32b = ArmInsCps
  pred ArmInsCrc32cb = ArmInsCrc32b
  pred ArmInsCrc32ch = ArmInsCrc32cb
  pred ArmInsCrc32cw = ArmInsCrc32ch
  pred ArmInsCrc32h = ArmInsCrc32cw
  pred ArmInsCrc32w = ArmInsCrc32h
  pred ArmInsDbg = ArmInsCrc32w
  pred ArmInsDmb = ArmInsDbg
  pred ArmInsDsb = ArmInsDmb
  pred ArmInsEor = ArmInsDsb
  pred ArmInsVmov = ArmInsEor
  pred ArmInsFldmdbx = ArmInsVmov
  pred ArmInsFldmiax = ArmInsFldmdbx
  pred ArmInsVmrs = ArmInsFldmiax
  pred ArmInsFstmdbx = ArmInsVmrs
  pred ArmInsFstmiax = ArmInsFstmdbx
  pred ArmInsHint = ArmInsFstmiax
  pred ArmInsHlt = ArmInsHint
  pred ArmInsIsb = ArmInsHlt
  pred ArmInsLda = ArmInsIsb
  pred ArmInsLdab = ArmInsLda
  pred ArmInsLdaex = ArmInsLdab
  pred ArmInsLdaexb = ArmInsLdaex
  pred ArmInsLdaexd = ArmInsLdaexb
  pred ArmInsLdaexh = ArmInsLdaexd
  pred ArmInsLdah = ArmInsLdaexh
  pred ArmInsLdc2l = ArmInsLdah
  pred ArmInsLdc2 = ArmInsLdc2l
  pred ArmInsLdcl = ArmInsLdc2
  pred ArmInsLdc = ArmInsLdcl
  pred ArmInsLdmda = ArmInsLdc
  pred ArmInsLdmdb = ArmInsLdmda
  pred ArmInsLdm = ArmInsLdmdb
  pred ArmInsLdmib = ArmInsLdm
  pred ArmInsLdrbt = ArmInsLdmib
  pred ArmInsLdrb = ArmInsLdrbt
  pred ArmInsLdrd = ArmInsLdrb
  pred ArmInsLdrex = ArmInsLdrd
  pred ArmInsLdrexb = ArmInsLdrex
  pred ArmInsLdrexd = ArmInsLdrexb
  pred ArmInsLdrexh = ArmInsLdrexd
  pred ArmInsLdrh = ArmInsLdrexh
  pred ArmInsLdrht = ArmInsLdrh
  pred ArmInsLdrsb = ArmInsLdrht
  pred ArmInsLdrsbt = ArmInsLdrsb
  pred ArmInsLdrsh = ArmInsLdrsbt
  pred ArmInsLdrsht = ArmInsLdrsh
  pred ArmInsLdrt = ArmInsLdrsht
  pred ArmInsLdr = ArmInsLdrt
  pred ArmInsMcr = ArmInsLdr
  pred ArmInsMcr2 = ArmInsMcr
  pred ArmInsMcrr = ArmInsMcr2
  pred ArmInsMcrr2 = ArmInsMcrr
  pred ArmInsMla = ArmInsMcrr2
  pred ArmInsMls = ArmInsMla
  pred ArmInsMov = ArmInsMls
  pred ArmInsMovt = ArmInsMov
  pred ArmInsMovw = ArmInsMovt
  pred ArmInsMrc = ArmInsMovw
  pred ArmInsMrc2 = ArmInsMrc
  pred ArmInsMrrc = ArmInsMrc2
  pred ArmInsMrrc2 = ArmInsMrrc
  pred ArmInsMrs = ArmInsMrrc2
  pred ArmInsMsr = ArmInsMrs
  pred ArmInsMul = ArmInsMsr
  pred ArmInsMvn = ArmInsMul
  pred ArmInsOrr = ArmInsMvn
  pred ArmInsPkhbt = ArmInsOrr
  pred ArmInsPkhtb = ArmInsPkhbt
  pred ArmInsPldw = ArmInsPkhtb
  pred ArmInsPld = ArmInsPldw
  pred ArmInsPli = ArmInsPld
  pred ArmInsQadd = ArmInsPli
  pred ArmInsQadd16 = ArmInsQadd
  pred ArmInsQadd8 = ArmInsQadd16
  pred ArmInsQasx = ArmInsQadd8
  pred ArmInsQdadd = ArmInsQasx
  pred ArmInsQdsub = ArmInsQdadd
  pred ArmInsQsax = ArmInsQdsub
  pred ArmInsQsub = ArmInsQsax
  pred ArmInsQsub16 = ArmInsQsub
  pred ArmInsQsub8 = ArmInsQsub16
  pred ArmInsRbit = ArmInsQsub8
  pred ArmInsRev = ArmInsRbit
  pred ArmInsRev16 = ArmInsRev
  pred ArmInsRevsh = ArmInsRev16
  pred ArmInsRfeda = ArmInsRevsh
  pred ArmInsRfedb = ArmInsRfeda
  pred ArmInsRfeia = ArmInsRfedb
  pred ArmInsRfeib = ArmInsRfeia
  pred ArmInsRsb = ArmInsRfeib
  pred ArmInsRsc = ArmInsRsb
  pred ArmInsSadd16 = ArmInsRsc
  pred ArmInsSadd8 = ArmInsSadd16
  pred ArmInsSasx = ArmInsSadd8
  pred ArmInsSbc = ArmInsSasx
  pred ArmInsSbfx = ArmInsSbc
  pred ArmInsSdiv = ArmInsSbfx
  pred ArmInsSel = ArmInsSdiv
  pred ArmInsSetend = ArmInsSel
  pred ArmInsSha1c = ArmInsSetend
  pred ArmInsSha1h = ArmInsSha1c
  pred ArmInsSha1m = ArmInsSha1h
  pred ArmInsSha1p = ArmInsSha1m
  pred ArmInsSha1su0 = ArmInsSha1p
  pred ArmInsSha1su1 = ArmInsSha1su0
  pred ArmInsSha256h = ArmInsSha1su1
  pred ArmInsSha256h2 = ArmInsSha256h
  pred ArmInsSha256su0 = ArmInsSha256h2
  pred ArmInsSha256su1 = ArmInsSha256su0
  pred ArmInsShadd16 = ArmInsSha256su1
  pred ArmInsShadd8 = ArmInsShadd16
  pred ArmInsShasx = ArmInsShadd8
  pred ArmInsShsax = ArmInsShasx
  pred ArmInsShsub16 = ArmInsShsax
  pred ArmInsShsub8 = ArmInsShsub16
  pred ArmInsSmc = ArmInsShsub8
  pred ArmInsSmlabb = ArmInsSmc
  pred ArmInsSmlabt = ArmInsSmlabb
  pred ArmInsSmlad = ArmInsSmlabt
  pred ArmInsSmladx = ArmInsSmlad
  pred ArmInsSmlal = ArmInsSmladx
  pred ArmInsSmlalbb = ArmInsSmlal
  pred ArmInsSmlalbt = ArmInsSmlalbb
  pred ArmInsSmlald = ArmInsSmlalbt
  pred ArmInsSmlaldx = ArmInsSmlald
  pred ArmInsSmlaltb = ArmInsSmlaldx
  pred ArmInsSmlaltt = ArmInsSmlaltb
  pred ArmInsSmlatb = ArmInsSmlaltt
  pred ArmInsSmlatt = ArmInsSmlatb
  pred ArmInsSmlawb = ArmInsSmlatt
  pred ArmInsSmlawt = ArmInsSmlawb
  pred ArmInsSmlsd = ArmInsSmlawt
  pred ArmInsSmlsdx = ArmInsSmlsd
  pred ArmInsSmlsld = ArmInsSmlsdx
  pred ArmInsSmlsldx = ArmInsSmlsld
  pred ArmInsSmmla = ArmInsSmlsldx
  pred ArmInsSmmlar = ArmInsSmmla
  pred ArmInsSmmls = ArmInsSmmlar
  pred ArmInsSmmlsr = ArmInsSmmls
  pred ArmInsSmmul = ArmInsSmmlsr
  pred ArmInsSmmulr = ArmInsSmmul
  pred ArmInsSmuad = ArmInsSmmulr
  pred ArmInsSmuadx = ArmInsSmuad
  pred ArmInsSmulbb = ArmInsSmuadx
  pred ArmInsSmulbt = ArmInsSmulbb
  pred ArmInsSmull = ArmInsSmulbt
  pred ArmInsSmultb = ArmInsSmull
  pred ArmInsSmultt = ArmInsSmultb
  pred ArmInsSmulwb = ArmInsSmultt
  pred ArmInsSmulwt = ArmInsSmulwb
  pred ArmInsSmusd = ArmInsSmulwt
  pred ArmInsSmusdx = ArmInsSmusd
  pred ArmInsSrsda = ArmInsSmusdx
  pred ArmInsSrsdb = ArmInsSrsda
  pred ArmInsSrsia = ArmInsSrsdb
  pred ArmInsSrsib = ArmInsSrsia
  pred ArmInsSsat = ArmInsSrsib
  pred ArmInsSsat16 = ArmInsSsat
  pred ArmInsSsax = ArmInsSsat16
  pred ArmInsSsub16 = ArmInsSsax
  pred ArmInsSsub8 = ArmInsSsub16
  pred ArmInsStc2l = ArmInsSsub8
  pred ArmInsStc2 = ArmInsStc2l
  pred ArmInsStcl = ArmInsStc2
  pred ArmInsStc = ArmInsStcl
  pred ArmInsStl = ArmInsStc
  pred ArmInsStlb = ArmInsStl
  pred ArmInsStlex = ArmInsStlb
  pred ArmInsStlexb = ArmInsStlex
  pred ArmInsStlexd = ArmInsStlexb
  pred ArmInsStlexh = ArmInsStlexd
  pred ArmInsStlh = ArmInsStlexh
  pred ArmInsStmda = ArmInsStlh
  pred ArmInsStmdb = ArmInsStmda
  pred ArmInsStm = ArmInsStmdb
  pred ArmInsStmib = ArmInsStm
  pred ArmInsStrbt = ArmInsStmib
  pred ArmInsStrb = ArmInsStrbt
  pred ArmInsStrd = ArmInsStrb
  pred ArmInsStrex = ArmInsStrd
  pred ArmInsStrexb = ArmInsStrex
  pred ArmInsStrexd = ArmInsStrexb
  pred ArmInsStrexh = ArmInsStrexd
  pred ArmInsStrh = ArmInsStrexh
  pred ArmInsStrht = ArmInsStrh
  pred ArmInsStrt = ArmInsStrht
  pred ArmInsStr = ArmInsStrt
  pred ArmInsSub = ArmInsStr
  pred ArmInsSvc = ArmInsSub
  pred ArmInsSwp = ArmInsSvc
  pred ArmInsSwpb = ArmInsSwp
  pred ArmInsSxtab = ArmInsSwpb
  pred ArmInsSxtab16 = ArmInsSxtab
  pred ArmInsSxtah = ArmInsSxtab16
  pred ArmInsSxtb = ArmInsSxtah
  pred ArmInsSxtb16 = ArmInsSxtb
  pred ArmInsSxth = ArmInsSxtb16
  pred ArmInsTeq = ArmInsSxth
  pred ArmInsTrap = ArmInsTeq
  pred ArmInsTst = ArmInsTrap
  pred ArmInsUadd16 = ArmInsTst
  pred ArmInsUadd8 = ArmInsUadd16
  pred ArmInsUasx = ArmInsUadd8
  pred ArmInsUbfx = ArmInsUasx
  pred ArmInsUdf = ArmInsUbfx
  pred ArmInsUdiv = ArmInsUdf
  pred ArmInsUhadd16 = ArmInsUdiv
  pred ArmInsUhadd8 = ArmInsUhadd16
  pred ArmInsUhasx = ArmInsUhadd8
  pred ArmInsUhsax = ArmInsUhasx
  pred ArmInsUhsub16 = ArmInsUhsax
  pred ArmInsUhsub8 = ArmInsUhsub16
  pred ArmInsUmaal = ArmInsUhsub8
  pred ArmInsUmlal = ArmInsUmaal
  pred ArmInsUmull = ArmInsUmlal
  pred ArmInsUqadd16 = ArmInsUmull
  pred ArmInsUqadd8 = ArmInsUqadd16
  pred ArmInsUqasx = ArmInsUqadd8
  pred ArmInsUqsax = ArmInsUqasx
  pred ArmInsUqsub16 = ArmInsUqsax
  pred ArmInsUqsub8 = ArmInsUqsub16
  pred ArmInsUsad8 = ArmInsUqsub8
  pred ArmInsUsada8 = ArmInsUsad8
  pred ArmInsUsat = ArmInsUsada8
  pred ArmInsUsat16 = ArmInsUsat
  pred ArmInsUsax = ArmInsUsat16
  pred ArmInsUsub16 = ArmInsUsax
  pred ArmInsUsub8 = ArmInsUsub16
  pred ArmInsUxtab = ArmInsUsub8
  pred ArmInsUxtab16 = ArmInsUxtab
  pred ArmInsUxtah = ArmInsUxtab16
  pred ArmInsUxtb = ArmInsUxtah
  pred ArmInsUxtb16 = ArmInsUxtb
  pred ArmInsUxth = ArmInsUxtb16
  pred ArmInsVabal = ArmInsUxth
  pred ArmInsVaba = ArmInsVabal
  pred ArmInsVabdl = ArmInsVaba
  pred ArmInsVabd = ArmInsVabdl
  pred ArmInsVabs = ArmInsVabd
  pred ArmInsVacge = ArmInsVabs
  pred ArmInsVacgt = ArmInsVacge
  pred ArmInsVadd = ArmInsVacgt
  pred ArmInsVaddhn = ArmInsVadd
  pred ArmInsVaddl = ArmInsVaddhn
  pred ArmInsVaddw = ArmInsVaddl
  pred ArmInsVand = ArmInsVaddw
  pred ArmInsVbic = ArmInsVand
  pred ArmInsVbif = ArmInsVbic
  pred ArmInsVbit = ArmInsVbif
  pred ArmInsVbsl = ArmInsVbit
  pred ArmInsVceq = ArmInsVbsl
  pred ArmInsVcge = ArmInsVceq
  pred ArmInsVcgt = ArmInsVcge
  pred ArmInsVcle = ArmInsVcgt
  pred ArmInsVcls = ArmInsVcle
  pred ArmInsVclt = ArmInsVcls
  pred ArmInsVclz = ArmInsVclt
  pred ArmInsVcmp = ArmInsVclz
  pred ArmInsVcmpe = ArmInsVcmp
  pred ArmInsVcnt = ArmInsVcmpe
  pred ArmInsVcvta = ArmInsVcnt
  pred ArmInsVcvtb = ArmInsVcvta
  pred ArmInsVcvt = ArmInsVcvtb
  pred ArmInsVcvtm = ArmInsVcvt
  pred ArmInsVcvtn = ArmInsVcvtm
  pred ArmInsVcvtp = ArmInsVcvtn
  pred ArmInsVcvtt = ArmInsVcvtp
  pred ArmInsVdiv = ArmInsVcvtt
  pred ArmInsVdup = ArmInsVdiv
  pred ArmInsVeor = ArmInsVdup
  pred ArmInsVext = ArmInsVeor
  pred ArmInsVfma = ArmInsVext
  pred ArmInsVfms = ArmInsVfma
  pred ArmInsVfnma = ArmInsVfms
  pred ArmInsVfnms = ArmInsVfnma
  pred ArmInsVhadd = ArmInsVfnms
  pred ArmInsVhsub = ArmInsVhadd
  pred ArmInsVld1 = ArmInsVhsub
  pred ArmInsVld2 = ArmInsVld1
  pred ArmInsVld3 = ArmInsVld2
  pred ArmInsVld4 = ArmInsVld3
  pred ArmInsVldmdb = ArmInsVld4
  pred ArmInsVldmia = ArmInsVldmdb
  pred ArmInsVldr = ArmInsVldmia
  pred ArmInsVmaxnm = ArmInsVldr
  pred ArmInsVmax = ArmInsVmaxnm
  pred ArmInsVminnm = ArmInsVmax
  pred ArmInsVmin = ArmInsVminnm
  pred ArmInsVmla = ArmInsVmin
  pred ArmInsVmlal = ArmInsVmla
  pred ArmInsVmls = ArmInsVmlal
  pred ArmInsVmlsl = ArmInsVmls
  pred ArmInsVmovl = ArmInsVmlsl
  pred ArmInsVmovn = ArmInsVmovl
  pred ArmInsVmsr = ArmInsVmovn
  pred ArmInsVmul = ArmInsVmsr
  pred ArmInsVmull = ArmInsVmul
  pred ArmInsVmvn = ArmInsVmull
  pred ArmInsVneg = ArmInsVmvn
  pred ArmInsVnmla = ArmInsVneg
  pred ArmInsVnmls = ArmInsVnmla
  pred ArmInsVnmul = ArmInsVnmls
  pred ArmInsVorn = ArmInsVnmul
  pred ArmInsVorr = ArmInsVorn
  pred ArmInsVpadal = ArmInsVorr
  pred ArmInsVpaddl = ArmInsVpadal
  pred ArmInsVpadd = ArmInsVpaddl
  pred ArmInsVpmax = ArmInsVpadd
  pred ArmInsVpmin = ArmInsVpmax
  pred ArmInsVqabs = ArmInsVpmin
  pred ArmInsVqadd = ArmInsVqabs
  pred ArmInsVqdmlal = ArmInsVqadd
  pred ArmInsVqdmlsl = ArmInsVqdmlal
  pred ArmInsVqdmulh = ArmInsVqdmlsl
  pred ArmInsVqdmull = ArmInsVqdmulh
  pred ArmInsVqmovun = ArmInsVqdmull
  pred ArmInsVqmovn = ArmInsVqmovun
  pred ArmInsVqneg = ArmInsVqmovn
  pred ArmInsVqrdmulh = ArmInsVqneg
  pred ArmInsVqrshl = ArmInsVqrdmulh
  pred ArmInsVqrshrn = ArmInsVqrshl
  pred ArmInsVqrshrun = ArmInsVqrshrn
  pred ArmInsVqshl = ArmInsVqrshrun
  pred ArmInsVqshlu = ArmInsVqshl
  pred ArmInsVqshrn = ArmInsVqshlu
  pred ArmInsVqshrun = ArmInsVqshrn
  pred ArmInsVqsub = ArmInsVqshrun
  pred ArmInsVraddhn = ArmInsVqsub
  pred ArmInsVrecpe = ArmInsVraddhn
  pred ArmInsVrecps = ArmInsVrecpe
  pred ArmInsVrev16 = ArmInsVrecps
  pred ArmInsVrev32 = ArmInsVrev16
  pred ArmInsVrev64 = ArmInsVrev32
  pred ArmInsVrhadd = ArmInsVrev64
  pred ArmInsVrinta = ArmInsVrhadd
  pred ArmInsVrintm = ArmInsVrinta
  pred ArmInsVrintn = ArmInsVrintm
  pred ArmInsVrintp = ArmInsVrintn
  pred ArmInsVrintr = ArmInsVrintp
  pred ArmInsVrintx = ArmInsVrintr
  pred ArmInsVrintz = ArmInsVrintx
  pred ArmInsVrshl = ArmInsVrintz
  pred ArmInsVrshrn = ArmInsVrshl
  pred ArmInsVrshr = ArmInsVrshrn
  pred ArmInsVrsqrte = ArmInsVrshr
  pred ArmInsVrsqrts = ArmInsVrsqrte
  pred ArmInsVrsra = ArmInsVrsqrts
  pred ArmInsVrsubhn = ArmInsVrsra
  pred ArmInsVseleq = ArmInsVrsubhn
  pred ArmInsVselge = ArmInsVseleq
  pred ArmInsVselgt = ArmInsVselge
  pred ArmInsVselvs = ArmInsVselgt
  pred ArmInsVshll = ArmInsVselvs
  pred ArmInsVshl = ArmInsVshll
  pred ArmInsVshrn = ArmInsVshl
  pred ArmInsVshr = ArmInsVshrn
  pred ArmInsVsli = ArmInsVshr
  pred ArmInsVsqrt = ArmInsVsli
  pred ArmInsVsra = ArmInsVsqrt
  pred ArmInsVsri = ArmInsVsra
  pred ArmInsVst1 = ArmInsVsri
  pred ArmInsVst2 = ArmInsVst1
  pred ArmInsVst3 = ArmInsVst2
  pred ArmInsVst4 = ArmInsVst3
  pred ArmInsVstmdb = ArmInsVst4
  pred ArmInsVstmia = ArmInsVstmdb
  pred ArmInsVstr = ArmInsVstmia
  pred ArmInsVsub = ArmInsVstr
  pred ArmInsVsubhn = ArmInsVsub
  pred ArmInsVsubl = ArmInsVsubhn
  pred ArmInsVsubw = ArmInsVsubl
  pred ArmInsVswp = ArmInsVsubw
  pred ArmInsVtbl = ArmInsVswp
  pred ArmInsVtbx = ArmInsVtbl
  pred ArmInsVcvtr = ArmInsVtbx
  pred ArmInsVtrn = ArmInsVcvtr
  pred ArmInsVtst = ArmInsVtrn
  pred ArmInsVuzp = ArmInsVtst
  pred ArmInsVzip = ArmInsVuzp
  pred ArmInsAddw = ArmInsVzip
  pred ArmInsAsr = ArmInsAddw
  pred ArmInsDcps1 = ArmInsAsr
  pred ArmInsDcps2 = ArmInsDcps1
  pred ArmInsDcps3 = ArmInsDcps2
  pred ArmInsIt = ArmInsDcps3
  pred ArmInsLsl = ArmInsIt
  pred ArmInsLsr = ArmInsLsl
  pred ArmInsAsrs = ArmInsLsr
  pred ArmInsLsrs = ArmInsAsrs
  pred ArmInsOrn = ArmInsLsrs
  pred ArmInsRor = ArmInsOrn
  pred ArmInsRrx = ArmInsRor
  pred ArmInsSubs = ArmInsRrx
  pred ArmInsSubw = ArmInsSubs
  pred ArmInsTbb = ArmInsSubw
  pred ArmInsTbh = ArmInsTbb
  pred ArmInsCbnz = ArmInsTbh
  pred ArmInsCbz = ArmInsCbnz
  pred ArmInsMovs = ArmInsCbz
  pred ArmInsPop = ArmInsMovs
  pred ArmInsPush = ArmInsPop
  pred ArmInsNop = ArmInsPush
  pred ArmInsYield = ArmInsNop
  pred ArmInsWfe = ArmInsYield
  pred ArmInsWfi = ArmInsWfe
  pred ArmInsSev = ArmInsWfi
  pred ArmInsSevl = ArmInsSev
  pred ArmInsVpush = ArmInsSevl
  pred ArmInsVpop = ArmInsVpush
  pred ArmInsEnding = ArmInsVpop
  pred ArmInsInvalid = error "ArmInsn.pred: ArmInsInvalid 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 ArmInsEnding

  fromEnum ArmInsInvalid = 0
  fromEnum ArmInsAdc = 1
  fromEnum ArmInsAdd = 2
  fromEnum ArmInsAdr = 3
  fromEnum ArmInsAesd = 4
  fromEnum ArmInsAese = 5
  fromEnum ArmInsAesimc = 6
  fromEnum ArmInsAesmc = 7
  fromEnum ArmInsAnd = 8
  fromEnum ArmInsBfc = 9
  fromEnum ArmInsBfi = 10
  fromEnum ArmInsBic = 11
  fromEnum ArmInsBkpt = 12
  fromEnum ArmInsBl = 13
  fromEnum ArmInsBlx = 14
  fromEnum ArmInsBx = 15
  fromEnum ArmInsBxj = 16
  fromEnum ArmInsB = 17
  fromEnum ArmInsCdp = 18
  fromEnum ArmInsCdp2 = 19
  fromEnum ArmInsClrex = 20
  fromEnum ArmInsClz = 21
  fromEnum ArmInsCmn = 22
  fromEnum ArmInsCmp = 23
  fromEnum ArmInsCps = 24
  fromEnum ArmInsCrc32b = 25
  fromEnum ArmInsCrc32cb = 26
  fromEnum ArmInsCrc32ch = 27
  fromEnum ArmInsCrc32cw = 28
  fromEnum ArmInsCrc32h = 29
  fromEnum ArmInsCrc32w = 30
  fromEnum ArmInsDbg = 31
  fromEnum ArmInsDmb = 32
  fromEnum ArmInsDsb = 33
  fromEnum ArmInsEor = 34
  fromEnum ArmInsVmov = 35
  fromEnum ArmInsFldmdbx = 36
  fromEnum ArmInsFldmiax = 37
  fromEnum ArmInsVmrs = 38
  fromEnum ArmInsFstmdbx = 39
  fromEnum ArmInsFstmiax = 40
  fromEnum ArmInsHint = 41
  fromEnum ArmInsHlt = 42
  fromEnum ArmInsIsb = 43
  fromEnum ArmInsLda = 44
  fromEnum ArmInsLdab = 45
  fromEnum ArmInsLdaex = 46
  fromEnum ArmInsLdaexb = 47
  fromEnum ArmInsLdaexd = 48
  fromEnum ArmInsLdaexh = 49
  fromEnum ArmInsLdah = 50
  fromEnum ArmInsLdc2l = 51
  fromEnum ArmInsLdc2 = 52
  fromEnum ArmInsLdcl = 53
  fromEnum ArmInsLdc = 54
  fromEnum ArmInsLdmda = 55
  fromEnum ArmInsLdmdb = 56
  fromEnum ArmInsLdm = 57
  fromEnum ArmInsLdmib = 58
  fromEnum ArmInsLdrbt = 59
  fromEnum ArmInsLdrb = 60
  fromEnum ArmInsLdrd = 61
  fromEnum ArmInsLdrex = 62
  fromEnum ArmInsLdrexb = 63
  fromEnum ArmInsLdrexd = 64
  fromEnum ArmInsLdrexh = 65
  fromEnum ArmInsLdrh = 66
  fromEnum ArmInsLdrht = 67
  fromEnum ArmInsLdrsb = 68
  fromEnum ArmInsLdrsbt = 69
  fromEnum ArmInsLdrsh = 70
  fromEnum ArmInsLdrsht = 71
  fromEnum ArmInsLdrt = 72
  fromEnum ArmInsLdr = 73
  fromEnum ArmInsMcr = 74
  fromEnum ArmInsMcr2 = 75
  fromEnum ArmInsMcrr = 76
  fromEnum ArmInsMcrr2 = 77
  fromEnum ArmInsMla = 78
  fromEnum ArmInsMls = 79
  fromEnum ArmInsMov = 80
  fromEnum ArmInsMovt = 81
  fromEnum ArmInsMovw = 82
  fromEnum ArmInsMrc = 83
  fromEnum ArmInsMrc2 = 84
  fromEnum ArmInsMrrc = 85
  fromEnum ArmInsMrrc2 = 86
  fromEnum ArmInsMrs = 87
  fromEnum ArmInsMsr = 88
  fromEnum ArmInsMul = 89
  fromEnum ArmInsMvn = 90
  fromEnum ArmInsOrr = 91
  fromEnum ArmInsPkhbt = 92
  fromEnum ArmInsPkhtb = 93
  fromEnum ArmInsPldw = 94
  fromEnum ArmInsPld = 95
  fromEnum ArmInsPli = 96
  fromEnum ArmInsQadd = 97
  fromEnum ArmInsQadd16 = 98
  fromEnum ArmInsQadd8 = 99
  fromEnum ArmInsQasx = 100
  fromEnum ArmInsQdadd = 101
  fromEnum ArmInsQdsub = 102
  fromEnum ArmInsQsax = 103
  fromEnum ArmInsQsub = 104
  fromEnum ArmInsQsub16 = 105
  fromEnum ArmInsQsub8 = 106
  fromEnum ArmInsRbit = 107
  fromEnum ArmInsRev = 108
  fromEnum ArmInsRev16 = 109
  fromEnum ArmInsRevsh = 110
  fromEnum ArmInsRfeda = 111
  fromEnum ArmInsRfedb = 112
  fromEnum ArmInsRfeia = 113
  fromEnum ArmInsRfeib = 114
  fromEnum ArmInsRsb = 115
  fromEnum ArmInsRsc = 116
  fromEnum ArmInsSadd16 = 117
  fromEnum ArmInsSadd8 = 118
  fromEnum ArmInsSasx = 119
  fromEnum ArmInsSbc = 120
  fromEnum ArmInsSbfx = 121
  fromEnum ArmInsSdiv = 122
  fromEnum ArmInsSel = 123
  fromEnum ArmInsSetend = 124
  fromEnum ArmInsSha1c = 125
  fromEnum ArmInsSha1h = 126
  fromEnum ArmInsSha1m = 127
  fromEnum ArmInsSha1p = 128
  fromEnum ArmInsSha1su0 = 129
  fromEnum ArmInsSha1su1 = 130
  fromEnum ArmInsSha256h = 131
  fromEnum ArmInsSha256h2 = 132
  fromEnum ArmInsSha256su0 = 133
  fromEnum ArmInsSha256su1 = 134
  fromEnum ArmInsShadd16 = 135
  fromEnum ArmInsShadd8 = 136
  fromEnum ArmInsShasx = 137
  fromEnum ArmInsShsax = 138
  fromEnum ArmInsShsub16 = 139
  fromEnum ArmInsShsub8 = 140
  fromEnum ArmInsSmc = 141
  fromEnum ArmInsSmlabb = 142
  fromEnum ArmInsSmlabt = 143
  fromEnum ArmInsSmlad = 144
  fromEnum ArmInsSmladx = 145
  fromEnum ArmInsSmlal = 146
  fromEnum ArmInsSmlalbb = 147
  fromEnum ArmInsSmlalbt = 148
  fromEnum ArmInsSmlald = 149
  fromEnum ArmInsSmlaldx = 150
  fromEnum ArmInsSmlaltb = 151
  fromEnum ArmInsSmlaltt = 152
  fromEnum ArmInsSmlatb = 153
  fromEnum ArmInsSmlatt = 154
  fromEnum ArmInsSmlawb = 155
  fromEnum ArmInsSmlawt = 156
  fromEnum ArmInsSmlsd = 157
  fromEnum ArmInsSmlsdx = 158
  fromEnum ArmInsSmlsld = 159
  fromEnum ArmInsSmlsldx = 160
  fromEnum ArmInsSmmla = 161
  fromEnum ArmInsSmmlar = 162
  fromEnum ArmInsSmmls = 163
  fromEnum ArmInsSmmlsr = 164
  fromEnum ArmInsSmmul = 165
  fromEnum ArmInsSmmulr = 166
  fromEnum ArmInsSmuad = 167
  fromEnum ArmInsSmuadx = 168
  fromEnum ArmInsSmulbb = 169
  fromEnum ArmInsSmulbt = 170
  fromEnum ArmInsSmull = 171
  fromEnum ArmInsSmultb = 172
  fromEnum ArmInsSmultt = 173
  fromEnum ArmInsSmulwb = 174
  fromEnum ArmInsSmulwt = 175
  fromEnum ArmInsSmusd = 176
  fromEnum ArmInsSmusdx = 177
  fromEnum ArmInsSrsda = 178
  fromEnum ArmInsSrsdb = 179
  fromEnum ArmInsSrsia = 180
  fromEnum ArmInsSrsib = 181
  fromEnum ArmInsSsat = 182
  fromEnum ArmInsSsat16 = 183
  fromEnum ArmInsSsax = 184
  fromEnum ArmInsSsub16 = 185
  fromEnum ArmInsSsub8 = 186
  fromEnum ArmInsStc2l = 187
  fromEnum ArmInsStc2 = 188
  fromEnum ArmInsStcl = 189
  fromEnum ArmInsStc = 190
  fromEnum ArmInsStl = 191
  fromEnum ArmInsStlb = 192
  fromEnum ArmInsStlex = 193
  fromEnum ArmInsStlexb = 194
  fromEnum ArmInsStlexd = 195
  fromEnum ArmInsStlexh = 196
  fromEnum ArmInsStlh = 197
  fromEnum ArmInsStmda = 198
  fromEnum ArmInsStmdb = 199
  fromEnum ArmInsStm = 200
  fromEnum ArmInsStmib = 201
  fromEnum ArmInsStrbt = 202
  fromEnum ArmInsStrb = 203
  fromEnum ArmInsStrd = 204
  fromEnum ArmInsStrex = 205
  fromEnum ArmInsStrexb = 206
  fromEnum ArmInsStrexd = 207
  fromEnum ArmInsStrexh = 208
  fromEnum ArmInsStrh = 209
  fromEnum ArmInsStrht = 210
  fromEnum ArmInsStrt = 211
  fromEnum ArmInsStr = 212
  fromEnum ArmInsSub = 213
  fromEnum ArmInsSvc = 214
  fromEnum ArmInsSwp = 215
  fromEnum ArmInsSwpb = 216
  fromEnum ArmInsSxtab = 217
  fromEnum ArmInsSxtab16 = 218
  fromEnum ArmInsSxtah = 219
  fromEnum ArmInsSxtb = 220
  fromEnum ArmInsSxtb16 = 221
  fromEnum ArmInsSxth = 222
  fromEnum ArmInsTeq = 223
  fromEnum ArmInsTrap = 224
  fromEnum ArmInsTst = 225
  fromEnum ArmInsUadd16 = 226
  fromEnum ArmInsUadd8 = 227
  fromEnum ArmInsUasx = 228
  fromEnum ArmInsUbfx = 229
  fromEnum ArmInsUdf = 230
  fromEnum ArmInsUdiv = 231
  fromEnum ArmInsUhadd16 = 232
  fromEnum ArmInsUhadd8 = 233
  fromEnum ArmInsUhasx = 234
  fromEnum ArmInsUhsax = 235
  fromEnum ArmInsUhsub16 = 236
  fromEnum ArmInsUhsub8 = 237
  fromEnum ArmInsUmaal = 238
  fromEnum ArmInsUmlal = 239
  fromEnum ArmInsUmull = 240
  fromEnum ArmInsUqadd16 = 241
  fromEnum ArmInsUqadd8 = 242
  fromEnum ArmInsUqasx = 243
  fromEnum ArmInsUqsax = 244
  fromEnum ArmInsUqsub16 = 245
  fromEnum ArmInsUqsub8 = 246
  fromEnum ArmInsUsad8 = 247
  fromEnum ArmInsUsada8 = 248
  fromEnum ArmInsUsat = 249
  fromEnum ArmInsUsat16 = 250
  fromEnum ArmInsUsax = 251
  fromEnum ArmInsUsub16 = 252
  fromEnum ArmInsUsub8 = 253
  fromEnum ArmInsUxtab = 254
  fromEnum ArmInsUxtab16 = 255
  fromEnum ArmInsUxtah = 256
  fromEnum ArmInsUxtb = 257
  fromEnum ArmInsUxtb16 = 258
  fromEnum ArmInsUxth = 259
  fromEnum ArmInsVabal = 260
  fromEnum ArmInsVaba = 261
  fromEnum ArmInsVabdl = 262
  fromEnum ArmInsVabd = 263
  fromEnum ArmInsVabs = 264
  fromEnum ArmInsVacge = 265
  fromEnum ArmInsVacgt = 266
  fromEnum ArmInsVadd = 267
  fromEnum ArmInsVaddhn = 268
  fromEnum ArmInsVaddl = 269
  fromEnum ArmInsVaddw = 270
  fromEnum ArmInsVand = 271
  fromEnum ArmInsVbic = 272
  fromEnum ArmInsVbif = 273
  fromEnum ArmInsVbit = 274
  fromEnum ArmInsVbsl = 275
  fromEnum ArmInsVceq = 276
  fromEnum ArmInsVcge = 277
  fromEnum ArmInsVcgt = 278
  fromEnum ArmInsVcle = 279
  fromEnum ArmInsVcls = 280
  fromEnum ArmInsVclt = 281
  fromEnum ArmInsVclz = 282
  fromEnum ArmInsVcmp = 283
  fromEnum ArmInsVcmpe = 284
  fromEnum ArmInsVcnt = 285
  fromEnum ArmInsVcvta = 286
  fromEnum ArmInsVcvtb = 287
  fromEnum ArmInsVcvt = 288
  fromEnum ArmInsVcvtm = 289
  fromEnum ArmInsVcvtn = 290
  fromEnum ArmInsVcvtp = 291
  fromEnum ArmInsVcvtt = 292
  fromEnum ArmInsVdiv = 293
  fromEnum ArmInsVdup = 294
  fromEnum ArmInsVeor = 295
  fromEnum ArmInsVext = 296
  fromEnum ArmInsVfma = 297
  fromEnum ArmInsVfms = 298
  fromEnum ArmInsVfnma = 299
  fromEnum ArmInsVfnms = 300
  fromEnum ArmInsVhadd = 301
  fromEnum ArmInsVhsub = 302
  fromEnum ArmInsVld1 = 303
  fromEnum ArmInsVld2 = 304
  fromEnum ArmInsVld3 = 305
  fromEnum ArmInsVld4 = 306
  fromEnum ArmInsVldmdb = 307
  fromEnum ArmInsVldmia = 308
  fromEnum ArmInsVldr = 309
  fromEnum ArmInsVmaxnm = 310
  fromEnum ArmInsVmax = 311
  fromEnum ArmInsVminnm = 312
  fromEnum ArmInsVmin = 313
  fromEnum ArmInsVmla = 314
  fromEnum ArmInsVmlal = 315
  fromEnum ArmInsVmls = 316
  fromEnum ArmInsVmlsl = 317
  fromEnum ArmInsVmovl = 318
  fromEnum ArmInsVmovn = 319
  fromEnum ArmInsVmsr = 320
  fromEnum ArmInsVmul = 321
  fromEnum ArmInsVmull = 322
  fromEnum ArmInsVmvn = 323
  fromEnum ArmInsVneg = 324
  fromEnum ArmInsVnmla = 325
  fromEnum ArmInsVnmls = 326
  fromEnum ArmInsVnmul = 327
  fromEnum ArmInsVorn = 328
  fromEnum ArmInsVorr = 329
  fromEnum ArmInsVpadal = 330
  fromEnum ArmInsVpaddl = 331
  fromEnum ArmInsVpadd = 332
  fromEnum ArmInsVpmax = 333
  fromEnum ArmInsVpmin = 334
  fromEnum ArmInsVqabs = 335
  fromEnum ArmInsVqadd = 336
  fromEnum ArmInsVqdmlal = 337
  fromEnum ArmInsVqdmlsl = 338
  fromEnum ArmInsVqdmulh = 339
  fromEnum ArmInsVqdmull = 340
  fromEnum ArmInsVqmovun = 341
  fromEnum ArmInsVqmovn = 342
  fromEnum ArmInsVqneg = 343
  fromEnum ArmInsVqrdmulh = 344
  fromEnum ArmInsVqrshl = 345
  fromEnum ArmInsVqrshrn = 346
  fromEnum ArmInsVqrshrun = 347
  fromEnum ArmInsVqshl = 348
  fromEnum ArmInsVqshlu = 349
  fromEnum ArmInsVqshrn = 350
  fromEnum ArmInsVqshrun = 351
  fromEnum ArmInsVqsub = 352
  fromEnum ArmInsVraddhn = 353
  fromEnum ArmInsVrecpe = 354
  fromEnum ArmInsVrecps = 355
  fromEnum ArmInsVrev16 = 356
  fromEnum ArmInsVrev32 = 357
  fromEnum ArmInsVrev64 = 358
  fromEnum ArmInsVrhadd = 359
  fromEnum ArmInsVrinta = 360
  fromEnum ArmInsVrintm = 361
  fromEnum ArmInsVrintn = 362
  fromEnum ArmInsVrintp = 363
  fromEnum ArmInsVrintr = 364
  fromEnum ArmInsVrintx = 365
  fromEnum ArmInsVrintz = 366
  fromEnum ArmInsVrshl = 367
  fromEnum ArmInsVrshrn = 368
  fromEnum ArmInsVrshr = 369
  fromEnum ArmInsVrsqrte = 370
  fromEnum ArmInsVrsqrts = 371
  fromEnum ArmInsVrsra = 372
  fromEnum ArmInsVrsubhn = 373
  fromEnum ArmInsVseleq = 374
  fromEnum ArmInsVselge = 375
  fromEnum ArmInsVselgt = 376
  fromEnum ArmInsVselvs = 377
  fromEnum ArmInsVshll = 378
  fromEnum ArmInsVshl = 379
  fromEnum ArmInsVshrn = 380
  fromEnum ArmInsVshr = 381
  fromEnum ArmInsVsli = 382
  fromEnum ArmInsVsqrt = 383
  fromEnum ArmInsVsra = 384
  fromEnum ArmInsVsri = 385
  fromEnum ArmInsVst1 = 386
  fromEnum ArmInsVst2 = 387
  fromEnum ArmInsVst3 = 388
  fromEnum ArmInsVst4 = 389
  fromEnum ArmInsVstmdb = 390
  fromEnum ArmInsVstmia = 391
  fromEnum ArmInsVstr = 392
  fromEnum ArmInsVsub = 393
  fromEnum ArmInsVsubhn = 394
  fromEnum ArmInsVsubl = 395
  fromEnum ArmInsVsubw = 396
  fromEnum ArmInsVswp = 397
  fromEnum ArmInsVtbl = 398
  fromEnum ArmInsVtbx = 399
  fromEnum ArmInsVcvtr = 400
  fromEnum ArmInsVtrn = 401
  fromEnum ArmInsVtst = 402
  fromEnum ArmInsVuzp = 403
  fromEnum ArmInsVzip = 404
  fromEnum ArmInsAddw = 405
  fromEnum ArmInsAsr = 406
  fromEnum ArmInsDcps1 = 407
  fromEnum ArmInsDcps2 = 408
  fromEnum ArmInsDcps3 = 409
  fromEnum ArmInsIt = 410
  fromEnum ArmInsLsl = 411
  fromEnum ArmInsLsr = 412
  fromEnum ArmInsAsrs = 413
  fromEnum ArmInsLsrs = 414
  fromEnum ArmInsOrn = 415
  fromEnum ArmInsRor = 416
  fromEnum ArmInsRrx = 417
  fromEnum ArmInsSubs = 418
  fromEnum ArmInsSubw = 419
  fromEnum ArmInsTbb = 420
  fromEnum ArmInsTbh = 421
  fromEnum ArmInsCbnz = 422
  fromEnum ArmInsCbz = 423
  fromEnum ArmInsMovs = 424
  fromEnum ArmInsPop = 425
  fromEnum ArmInsPush = 426
  fromEnum ArmInsNop = 427
  fromEnum ArmInsYield = 428
  fromEnum ArmInsWfe = 429
  fromEnum ArmInsWfi = 430
  fromEnum ArmInsSev = 431
  fromEnum ArmInsSevl = 432
  fromEnum ArmInsVpush = 433
  fromEnum ArmInsVpop = 434
  fromEnum ArmInsEnding = 435

  toEnum 0 = ArmInsInvalid
  toEnum 1 = ArmInsAdc
  toEnum 2 = ArmInsAdd
  toEnum 3 = ArmInsAdr
  toEnum 4 = ArmInsAesd
  toEnum 5 = ArmInsAese
  toEnum 6 = ArmInsAesimc
  toEnum 7 = ArmInsAesmc
  toEnum 8 = ArmInsAnd
  toEnum 9 = ArmInsBfc
  toEnum 10 = ArmInsBfi
  toEnum 11 = ArmInsBic
  toEnum 12 = ArmInsBkpt
  toEnum 13 = ArmInsBl
  toEnum 14 = ArmInsBlx
  toEnum 15 = ArmInsBx
  toEnum 16 = ArmInsBxj
  toEnum 17 = ArmInsB
  toEnum 18 = ArmInsCdp
  toEnum 19 = ArmInsCdp2
  toEnum 20 = ArmInsClrex
  toEnum 21 = ArmInsClz
  toEnum 22 = ArmInsCmn
  toEnum 23 = ArmInsCmp
  toEnum 24 = ArmInsCps
  toEnum 25 = ArmInsCrc32b
  toEnum 26 = ArmInsCrc32cb
  toEnum 27 = ArmInsCrc32ch
  toEnum 28 = ArmInsCrc32cw
  toEnum 29 = ArmInsCrc32h
  toEnum 30 = ArmInsCrc32w
  toEnum 31 = ArmInsDbg
  toEnum 32 = ArmInsDmb
  toEnum 33 = ArmInsDsb
  toEnum 34 = ArmInsEor
  toEnum 35 = ArmInsVmov
  toEnum 36 = ArmInsFldmdbx
  toEnum 37 = ArmInsFldmiax
  toEnum 38 = ArmInsVmrs
  toEnum 39 = ArmInsFstmdbx
  toEnum 40 = ArmInsFstmiax
  toEnum 41 = ArmInsHint
  toEnum 42 = ArmInsHlt
  toEnum 43 = ArmInsIsb
  toEnum 44 = ArmInsLda
  toEnum 45 = ArmInsLdab
  toEnum 46 = ArmInsLdaex
  toEnum 47 = ArmInsLdaexb
  toEnum 48 = ArmInsLdaexd
  toEnum 49 = ArmInsLdaexh
  toEnum 50 = ArmInsLdah
  toEnum 51 = ArmInsLdc2l
  toEnum 52 = ArmInsLdc2
  toEnum 53 = ArmInsLdcl
  toEnum 54 = ArmInsLdc
  toEnum 55 = ArmInsLdmda
  toEnum 56 = ArmInsLdmdb
  toEnum 57 = ArmInsLdm
  toEnum 58 = ArmInsLdmib
  toEnum 59 = ArmInsLdrbt
  toEnum 60 = ArmInsLdrb
  toEnum 61 = ArmInsLdrd
  toEnum 62 = ArmInsLdrex
  toEnum 63 = ArmInsLdrexb
  toEnum 64 = ArmInsLdrexd
  toEnum 65 = ArmInsLdrexh
  toEnum 66 = ArmInsLdrh
  toEnum 67 = ArmInsLdrht
  toEnum 68 = ArmInsLdrsb
  toEnum 69 = ArmInsLdrsbt
  toEnum 70 = ArmInsLdrsh
  toEnum 71 = ArmInsLdrsht
  toEnum 72 = ArmInsLdrt
  toEnum 73 = ArmInsLdr
  toEnum 74 = ArmInsMcr
  toEnum 75 = ArmInsMcr2
  toEnum 76 = ArmInsMcrr
  toEnum 77 = ArmInsMcrr2
  toEnum 78 = ArmInsMla
  toEnum 79 = ArmInsMls
  toEnum 80 = ArmInsMov
  toEnum 81 = ArmInsMovt
  toEnum 82 = ArmInsMovw
  toEnum 83 = ArmInsMrc
  toEnum 84 = ArmInsMrc2
  toEnum 85 = ArmInsMrrc
  toEnum 86 = ArmInsMrrc2
  toEnum 87 = ArmInsMrs
  toEnum 88 = ArmInsMsr
  toEnum 89 = ArmInsMul
  toEnum 90 = ArmInsMvn
  toEnum 91 = ArmInsOrr
  toEnum 92 = ArmInsPkhbt
  toEnum 93 = ArmInsPkhtb
  toEnum 94 = ArmInsPldw
  toEnum 95 = ArmInsPld
  toEnum 96 = ArmInsPli
  toEnum 97 = ArmInsQadd
  toEnum 98 = ArmInsQadd16
  toEnum 99 = ArmInsQadd8
  toEnum 100 = ArmInsQasx
  toEnum 101 = ArmInsQdadd
  toEnum 102 = ArmInsQdsub
  toEnum 103 = ArmInsQsax
  toEnum 104 = ArmInsQsub
  toEnum 105 = ArmInsQsub16
  toEnum 106 = ArmInsQsub8
  toEnum 107 = ArmInsRbit
  toEnum 108 = ArmInsRev
  toEnum 109 = ArmInsRev16
  toEnum 110 = ArmInsRevsh
  toEnum 111 = ArmInsRfeda
  toEnum 112 = ArmInsRfedb
  toEnum 113 = ArmInsRfeia
  toEnum 114 = ArmInsRfeib
  toEnum 115 = ArmInsRsb
  toEnum 116 = ArmInsRsc
  toEnum 117 = ArmInsSadd16
  toEnum 118 = ArmInsSadd8
  toEnum 119 = ArmInsSasx
  toEnum 120 = ArmInsSbc
  toEnum 121 = ArmInsSbfx
  toEnum 122 = ArmInsSdiv
  toEnum 123 = ArmInsSel
  toEnum 124 = ArmInsSetend
  toEnum 125 = ArmInsSha1c
  toEnum 126 = ArmInsSha1h
  toEnum 127 = ArmInsSha1m
  toEnum 128 = ArmInsSha1p
  toEnum 129 = ArmInsSha1su0
  toEnum 130 = ArmInsSha1su1
  toEnum 131 = ArmInsSha256h
  toEnum 132 = ArmInsSha256h2
  toEnum 133 = ArmInsSha256su0
  toEnum 134 = ArmInsSha256su1
  toEnum 135 = ArmInsShadd16
  toEnum 136 = ArmInsShadd8
  toEnum 137 = ArmInsShasx
  toEnum 138 = ArmInsShsax
  toEnum 139 = ArmInsShsub16
  toEnum 140 = ArmInsShsub8
  toEnum 141 = ArmInsSmc
  toEnum 142 = ArmInsSmlabb
  toEnum 143 = ArmInsSmlabt
  toEnum 144 = ArmInsSmlad
  toEnum 145 = ArmInsSmladx
  toEnum 146 = ArmInsSmlal
  toEnum 147 = ArmInsSmlalbb
  toEnum 148 = ArmInsSmlalbt
  toEnum 149 = ArmInsSmlald
  toEnum 150 = ArmInsSmlaldx
  toEnum 151 = ArmInsSmlaltb
  toEnum 152 = ArmInsSmlaltt
  toEnum 153 = ArmInsSmlatb
  toEnum 154 = ArmInsSmlatt
  toEnum 155 = ArmInsSmlawb
  toEnum 156 = ArmInsSmlawt
  toEnum 157 = ArmInsSmlsd
  toEnum 158 = ArmInsSmlsdx
  toEnum 159 = ArmInsSmlsld
  toEnum 160 = ArmInsSmlsldx
  toEnum 161 = ArmInsSmmla
  toEnum 162 = ArmInsSmmlar
  toEnum 163 = ArmInsSmmls
  toEnum 164 = ArmInsSmmlsr
  toEnum 165 = ArmInsSmmul
  toEnum 166 = ArmInsSmmulr
  toEnum 167 = ArmInsSmuad
  toEnum 168 = ArmInsSmuadx
  toEnum 169 = ArmInsSmulbb
  toEnum 170 = ArmInsSmulbt
  toEnum 171 = ArmInsSmull
  toEnum 172 = ArmInsSmultb
  toEnum 173 = ArmInsSmultt
  toEnum 174 = ArmInsSmulwb
  toEnum 175 = ArmInsSmulwt
  toEnum 176 = ArmInsSmusd
  toEnum 177 = ArmInsSmusdx
  toEnum 178 = ArmInsSrsda
  toEnum 179 = ArmInsSrsdb
  toEnum 180 = ArmInsSrsia
  toEnum 181 = ArmInsSrsib
  toEnum 182 = ArmInsSsat
  toEnum 183 = ArmInsSsat16
  toEnum 184 = ArmInsSsax
  toEnum 185 = ArmInsSsub16
  toEnum 186 = ArmInsSsub8
  toEnum 187 = ArmInsStc2l
  toEnum 188 = ArmInsStc2
  toEnum 189 = ArmInsStcl
  toEnum 190 = ArmInsStc
  toEnum 191 = ArmInsStl
  toEnum 192 = ArmInsStlb
  toEnum 193 = ArmInsStlex
  toEnum 194 = ArmInsStlexb
  toEnum 195 = ArmInsStlexd
  toEnum 196 = ArmInsStlexh
  toEnum 197 = ArmInsStlh
  toEnum 198 = ArmInsStmda
  toEnum 199 = ArmInsStmdb
  toEnum 200 = ArmInsStm
  toEnum 201 = ArmInsStmib
  toEnum 202 = ArmInsStrbt
  toEnum 203 = ArmInsStrb
  toEnum 204 = ArmInsStrd
  toEnum 205 = ArmInsStrex
  toEnum 206 = ArmInsStrexb
  toEnum 207 = ArmInsStrexd
  toEnum 208 = ArmInsStrexh
  toEnum 209 = ArmInsStrh
  toEnum 210 = ArmInsStrht
  toEnum 211 = ArmInsStrt
  toEnum 212 = ArmInsStr
  toEnum 213 = ArmInsSub
  toEnum 214 = ArmInsSvc
  toEnum 215 = ArmInsSwp
  toEnum 216 = ArmInsSwpb
  toEnum 217 = ArmInsSxtab
  toEnum 218 = ArmInsSxtab16
  toEnum 219 = ArmInsSxtah
  toEnum 220 = ArmInsSxtb
  toEnum 221 = ArmInsSxtb16
  toEnum 222 = ArmInsSxth
  toEnum 223 = ArmInsTeq
  toEnum 224 = ArmInsTrap
  toEnum 225 = ArmInsTst
  toEnum 226 = ArmInsUadd16
  toEnum 227 = ArmInsUadd8
  toEnum 228 = ArmInsUasx
  toEnum 229 = ArmInsUbfx
  toEnum 230 = ArmInsUdf
  toEnum 231 = ArmInsUdiv
  toEnum 232 = ArmInsUhadd16
  toEnum 233 = ArmInsUhadd8
  toEnum 234 = ArmInsUhasx
  toEnum 235 = ArmInsUhsax
  toEnum 236 = ArmInsUhsub16
  toEnum 237 = ArmInsUhsub8
  toEnum 238 = ArmInsUmaal
  toEnum 239 = ArmInsUmlal
  toEnum 240 = ArmInsUmull
  toEnum 241 = ArmInsUqadd16
  toEnum 242 = ArmInsUqadd8
  toEnum 243 = ArmInsUqasx
  toEnum 244 = ArmInsUqsax
  toEnum 245 = ArmInsUqsub16
  toEnum 246 = ArmInsUqsub8
  toEnum 247 = ArmInsUsad8
  toEnum 248 = ArmInsUsada8
  toEnum 249 = ArmInsUsat
  toEnum 250 = ArmInsUsat16
  toEnum 251 = ArmInsUsax
  toEnum 252 = ArmInsUsub16
  toEnum 253 = ArmInsUsub8
  toEnum 254 = ArmInsUxtab
  toEnum 255 = ArmInsUxtab16
  toEnum 256 = ArmInsUxtah
  toEnum 257 = ArmInsUxtb
  toEnum 258 = ArmInsUxtb16
  toEnum 259 = ArmInsUxth
  toEnum 260 = ArmInsVabal
  toEnum 261 = ArmInsVaba
  toEnum 262 = ArmInsVabdl
  toEnum 263 = ArmInsVabd
  toEnum 264 = ArmInsVabs
  toEnum 265 = ArmInsVacge
  toEnum 266 = ArmInsVacgt
  toEnum 267 = ArmInsVadd
  toEnum 268 = ArmInsVaddhn
  toEnum 269 = ArmInsVaddl
  toEnum 270 = ArmInsVaddw
  toEnum 271 = ArmInsVand
  toEnum 272 = ArmInsVbic
  toEnum 273 = ArmInsVbif
  toEnum 274 = ArmInsVbit
  toEnum 275 = ArmInsVbsl
  toEnum 276 = ArmInsVceq
  toEnum 277 = ArmInsVcge
  toEnum 278 = ArmInsVcgt
  toEnum 279 = ArmInsVcle
  toEnum 280 = ArmInsVcls
  toEnum 281 = ArmInsVclt
  toEnum 282 = ArmInsVclz
  toEnum 283 = ArmInsVcmp
  toEnum 284 = ArmInsVcmpe
  toEnum 285 = ArmInsVcnt
  toEnum 286 = ArmInsVcvta
  toEnum 287 = ArmInsVcvtb
  toEnum 288 = ArmInsVcvt
  toEnum 289 = ArmInsVcvtm
  toEnum 290 = ArmInsVcvtn
  toEnum 291 = ArmInsVcvtp
  toEnum 292 = ArmInsVcvtt
  toEnum 293 = ArmInsVdiv
  toEnum 294 = ArmInsVdup
  toEnum 295 = ArmInsVeor
  toEnum 296 = ArmInsVext
  toEnum 297 = ArmInsVfma
  toEnum 298 = ArmInsVfms
  toEnum 299 = ArmInsVfnma
  toEnum 300 = ArmInsVfnms
  toEnum 301 = ArmInsVhadd
  toEnum 302 = ArmInsVhsub
  toEnum 303 = ArmInsVld1
  toEnum 304 = ArmInsVld2
  toEnum 305 = ArmInsVld3
  toEnum 306 = ArmInsVld4
  toEnum 307 = ArmInsVldmdb
  toEnum 308 = ArmInsVldmia
  toEnum 309 = ArmInsVldr
  toEnum 310 = ArmInsVmaxnm
  toEnum 311 = ArmInsVmax
  toEnum 312 = ArmInsVminnm
  toEnum 313 = ArmInsVmin
  toEnum 314 = ArmInsVmla
  toEnum 315 = ArmInsVmlal
  toEnum 316 = ArmInsVmls
  toEnum 317 = ArmInsVmlsl
  toEnum 318 = ArmInsVmovl
  toEnum 319 = ArmInsVmovn
  toEnum 320 = ArmInsVmsr
  toEnum 321 = ArmInsVmul
  toEnum 322 = ArmInsVmull
  toEnum 323 = ArmInsVmvn
  toEnum 324 = ArmInsVneg
  toEnum 325 = ArmInsVnmla
  toEnum 326 = ArmInsVnmls
  toEnum 327 = ArmInsVnmul
  toEnum 328 = ArmInsVorn
  toEnum 329 = ArmInsVorr
  toEnum 330 = ArmInsVpadal
  toEnum 331 = ArmInsVpaddl
  toEnum 332 = ArmInsVpadd
  toEnum 333 = ArmInsVpmax
  toEnum 334 = ArmInsVpmin
  toEnum 335 = ArmInsVqabs
  toEnum 336 = ArmInsVqadd
  toEnum 337 = ArmInsVqdmlal
  toEnum 338 = ArmInsVqdmlsl
  toEnum 339 = ArmInsVqdmulh
  toEnum 340 = ArmInsVqdmull
  toEnum 341 = ArmInsVqmovun
  toEnum 342 = ArmInsVqmovn
  toEnum 343 = ArmInsVqneg
  toEnum 344 = ArmInsVqrdmulh
  toEnum 345 = ArmInsVqrshl
  toEnum 346 = ArmInsVqrshrn
  toEnum 347 = ArmInsVqrshrun
  toEnum 348 = ArmInsVqshl
  toEnum 349 = ArmInsVqshlu
  toEnum 350 = ArmInsVqshrn
  toEnum 351 = ArmInsVqshrun
  toEnum 352 = ArmInsVqsub
  toEnum 353 = ArmInsVraddhn
  toEnum 354 = ArmInsVrecpe
  toEnum 355 = ArmInsVrecps
  toEnum 356 = ArmInsVrev16
  toEnum 357 = ArmInsVrev32
  toEnum 358 = ArmInsVrev64
  toEnum 359 = ArmInsVrhadd
  toEnum 360 = ArmInsVrinta
  toEnum 361 = ArmInsVrintm
  toEnum 362 = ArmInsVrintn
  toEnum 363 = ArmInsVrintp
  toEnum 364 = ArmInsVrintr
  toEnum 365 = ArmInsVrintx
  toEnum 366 = ArmInsVrintz
  toEnum 367 = ArmInsVrshl
  toEnum 368 = ArmInsVrshrn
  toEnum 369 = ArmInsVrshr
  toEnum 370 = ArmInsVrsqrte
  toEnum 371 = ArmInsVrsqrts
  toEnum 372 = ArmInsVrsra
  toEnum 373 = ArmInsVrsubhn
  toEnum 374 = ArmInsVseleq
  toEnum 375 = ArmInsVselge
  toEnum 376 = ArmInsVselgt
  toEnum 377 = ArmInsVselvs
  toEnum 378 = ArmInsVshll
  toEnum 379 = ArmInsVshl
  toEnum 380 = ArmInsVshrn
  toEnum 381 = ArmInsVshr
  toEnum 382 = ArmInsVsli
  toEnum 383 = ArmInsVsqrt
  toEnum 384 = ArmInsVsra
  toEnum 385 = ArmInsVsri
  toEnum 386 = ArmInsVst1
  toEnum 387 = ArmInsVst2
  toEnum 388 = ArmInsVst3
  toEnum 389 = ArmInsVst4
  toEnum 390 = ArmInsVstmdb
  toEnum 391 = ArmInsVstmia
  toEnum 392 = ArmInsVstr
  toEnum 393 = ArmInsVsub
  toEnum 394 = ArmInsVsubhn
  toEnum 395 = ArmInsVsubl
  toEnum 396 = ArmInsVsubw
  toEnum 397 = ArmInsVswp
  toEnum 398 = ArmInsVtbl
  toEnum 399 = ArmInsVtbx
  toEnum 400 = ArmInsVcvtr
  toEnum 401 = ArmInsVtrn
  toEnum 402 = ArmInsVtst
  toEnum 403 = ArmInsVuzp
  toEnum 404 = ArmInsVzip
  toEnum 405 = ArmInsAddw
  toEnum 406 = ArmInsAsr
  toEnum 407 = ArmInsDcps1
  toEnum 408 = ArmInsDcps2
  toEnum 409 = ArmInsDcps3
  toEnum 410 = ArmInsIt
  toEnum 411 = ArmInsLsl
  toEnum 412 = ArmInsLsr
  toEnum 413 = ArmInsAsrs
  toEnum 414 = ArmInsLsrs
  toEnum 415 = ArmInsOrn
  toEnum 416 = ArmInsRor
  toEnum 417 = ArmInsRrx
  toEnum 418 = ArmInsSubs
  toEnum 419 = ArmInsSubw
  toEnum 420 = ArmInsTbb
  toEnum 421 = ArmInsTbh
  toEnum 422 = ArmInsCbnz
  toEnum 423 = ArmInsCbz
  toEnum 424 = ArmInsMovs
  toEnum 425 = ArmInsPop
  toEnum 426 = ArmInsPush
  toEnum 427 = ArmInsNop
  toEnum 428 = ArmInsYield
  toEnum 429 = ArmInsWfe
  toEnum 430 = ArmInsWfi
  toEnum 431 = ArmInsSev
  toEnum 432 = ArmInsSevl
  toEnum 433 = ArmInsVpush
  toEnum 434 = ArmInsVpop
  toEnum 435 = ArmInsEnding
  toEnum unmatched = error ("ArmInsn.toEnum: Cannot match " ++ show unmatched)

{-# LINE 218 "src/Hapstone/Internal/Arm.chs" #-}

-- | ARM instruction groups
data ArmInsnGroup = ArmGrpInvalid
                  | ArmGrpJump
                  | ArmGrpCrypto
                  | ArmGrpDatabarrier
                  | ArmGrpDivide
                  | ArmGrpFparmv8
                  | ArmGrpMultpro
                  | ArmGrpNeon
                  | ArmGrpT2extractpack
                  | ArmGrpThumb2dsp
                  | ArmGrpTrustzone
                  | ArmGrpV4t
                  | ArmGrpV5t
                  | ArmGrpV5te
                  | ArmGrpV6
                  | ArmGrpV6t2
                  | ArmGrpV7
                  | ArmGrpV8
                  | ArmGrpVfp2
                  | ArmGrpVfp3
                  | ArmGrpVfp4
                  | ArmGrpArm
                  | ArmGrpMclass
                  | ArmGrpNotmclass
                  | ArmGrpThumb
                  | ArmGrpThumb1only
                  | ArmGrpThumb2
                  | ArmGrpPrev8
                  | ArmGrpFpvmlx
                  | ArmGrpMulops
                  | ArmGrpCrc
                  | ArmGrpDpvfp
                  | ArmGrpV6m
                  | ArmGrpEnding
  deriving (Show,Eq,Bounded)
instance Enum ArmInsnGroup where
  succ ArmGrpInvalid = ArmGrpJump
  succ ArmGrpJump = ArmGrpCrypto
  succ ArmGrpCrypto = ArmGrpDatabarrier
  succ ArmGrpDatabarrier = ArmGrpDivide
  succ ArmGrpDivide = ArmGrpFparmv8
  succ ArmGrpFparmv8 = ArmGrpMultpro
  succ ArmGrpMultpro = ArmGrpNeon
  succ ArmGrpNeon = ArmGrpT2extractpack
  succ ArmGrpT2extractpack = ArmGrpThumb2dsp
  succ ArmGrpThumb2dsp = ArmGrpTrustzone
  succ ArmGrpTrustzone = ArmGrpV4t
  succ ArmGrpV4t = ArmGrpV5t
  succ ArmGrpV5t = ArmGrpV5te
  succ ArmGrpV5te = ArmGrpV6
  succ ArmGrpV6 = ArmGrpV6t2
  succ ArmGrpV6t2 = ArmGrpV7
  succ ArmGrpV7 = ArmGrpV8
  succ ArmGrpV8 = ArmGrpVfp2
  succ ArmGrpVfp2 = ArmGrpVfp3
  succ ArmGrpVfp3 = ArmGrpVfp4
  succ ArmGrpVfp4 = ArmGrpArm
  succ ArmGrpArm = ArmGrpMclass
  succ ArmGrpMclass = ArmGrpNotmclass
  succ ArmGrpNotmclass = ArmGrpThumb
  succ ArmGrpThumb = ArmGrpThumb1only
  succ ArmGrpThumb1only = ArmGrpThumb2
  succ ArmGrpThumb2 = ArmGrpPrev8
  succ ArmGrpPrev8 = ArmGrpFpvmlx
  succ ArmGrpFpvmlx = ArmGrpMulops
  succ ArmGrpMulops = ArmGrpCrc
  succ ArmGrpCrc = ArmGrpDpvfp
  succ ArmGrpDpvfp = ArmGrpV6m
  succ ArmGrpV6m = ArmGrpEnding
  succ ArmGrpEnding = error "ArmInsnGroup.succ: ArmGrpEnding has no successor"

  pred ArmGrpJump = ArmGrpInvalid
  pred ArmGrpCrypto = ArmGrpJump
  pred ArmGrpDatabarrier = ArmGrpCrypto
  pred ArmGrpDivide = ArmGrpDatabarrier
  pred ArmGrpFparmv8 = ArmGrpDivide
  pred ArmGrpMultpro = ArmGrpFparmv8
  pred ArmGrpNeon = ArmGrpMultpro
  pred ArmGrpT2extractpack = ArmGrpNeon
  pred ArmGrpThumb2dsp = ArmGrpT2extractpack
  pred ArmGrpTrustzone = ArmGrpThumb2dsp
  pred ArmGrpV4t = ArmGrpTrustzone
  pred ArmGrpV5t = ArmGrpV4t
  pred ArmGrpV5te = ArmGrpV5t
  pred ArmGrpV6 = ArmGrpV5te
  pred ArmGrpV6t2 = ArmGrpV6
  pred ArmGrpV7 = ArmGrpV6t2
  pred ArmGrpV8 = ArmGrpV7
  pred ArmGrpVfp2 = ArmGrpV8
  pred ArmGrpVfp3 = ArmGrpVfp2
  pred ArmGrpVfp4 = ArmGrpVfp3
  pred ArmGrpArm = ArmGrpVfp4
  pred ArmGrpMclass = ArmGrpArm
  pred ArmGrpNotmclass = ArmGrpMclass
  pred ArmGrpThumb = ArmGrpNotmclass
  pred ArmGrpThumb1only = ArmGrpThumb
  pred ArmGrpThumb2 = ArmGrpThumb1only
  pred ArmGrpPrev8 = ArmGrpThumb2
  pred ArmGrpFpvmlx = ArmGrpPrev8
  pred ArmGrpMulops = ArmGrpFpvmlx
  pred ArmGrpCrc = ArmGrpMulops
  pred ArmGrpDpvfp = ArmGrpCrc
  pred ArmGrpV6m = ArmGrpDpvfp
  pred ArmGrpEnding = ArmGrpV6m
  pred ArmGrpInvalid = error "ArmInsnGroup.pred: ArmGrpInvalid 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 ArmGrpEnding

  fromEnum ArmGrpInvalid = 0
  fromEnum ArmGrpJump = 1
  fromEnum ArmGrpCrypto = 128
  fromEnum ArmGrpDatabarrier = 129
  fromEnum ArmGrpDivide = 130
  fromEnum ArmGrpFparmv8 = 131
  fromEnum ArmGrpMultpro = 132
  fromEnum ArmGrpNeon = 133
  fromEnum ArmGrpT2extractpack = 134
  fromEnum ArmGrpThumb2dsp = 135
  fromEnum ArmGrpTrustzone = 136
  fromEnum ArmGrpV4t = 137
  fromEnum ArmGrpV5t = 138
  fromEnum ArmGrpV5te = 139
  fromEnum ArmGrpV6 = 140
  fromEnum ArmGrpV6t2 = 141
  fromEnum ArmGrpV7 = 142
  fromEnum ArmGrpV8 = 143
  fromEnum ArmGrpVfp2 = 144
  fromEnum ArmGrpVfp3 = 145
  fromEnum ArmGrpVfp4 = 146
  fromEnum ArmGrpArm = 147
  fromEnum ArmGrpMclass = 148
  fromEnum ArmGrpNotmclass = 149
  fromEnum ArmGrpThumb = 150
  fromEnum ArmGrpThumb1only = 151
  fromEnum ArmGrpThumb2 = 152
  fromEnum ArmGrpPrev8 = 153
  fromEnum ArmGrpFpvmlx = 154
  fromEnum ArmGrpMulops = 155
  fromEnum ArmGrpCrc = 156
  fromEnum ArmGrpDpvfp = 157
  fromEnum ArmGrpV6m = 158
  fromEnum ArmGrpEnding = 159

  toEnum 0 = ArmGrpInvalid
  toEnum 1 = ArmGrpJump
  toEnum 128 = ArmGrpCrypto
  toEnum 129 = ArmGrpDatabarrier
  toEnum 130 = ArmGrpDivide
  toEnum 131 = ArmGrpFparmv8
  toEnum 132 = ArmGrpMultpro
  toEnum 133 = ArmGrpNeon
  toEnum 134 = ArmGrpT2extractpack
  toEnum 135 = ArmGrpThumb2dsp
  toEnum 136 = ArmGrpTrustzone
  toEnum 137 = ArmGrpV4t
  toEnum 138 = ArmGrpV5t
  toEnum 139 = ArmGrpV5te
  toEnum 140 = ArmGrpV6
  toEnum 141 = ArmGrpV6t2
  toEnum 142 = ArmGrpV7
  toEnum 143 = ArmGrpV8
  toEnum 144 = ArmGrpVfp2
  toEnum 145 = ArmGrpVfp3
  toEnum 146 = ArmGrpVfp4
  toEnum 147 = ArmGrpArm
  toEnum 148 = ArmGrpMclass
  toEnum 149 = ArmGrpNotmclass
  toEnum 150 = ArmGrpThumb
  toEnum 151 = ArmGrpThumb1only
  toEnum 152 = ArmGrpThumb2
  toEnum 153 = ArmGrpPrev8
  toEnum 154 = ArmGrpFpvmlx
  toEnum 155 = ArmGrpMulops
  toEnum 156 = ArmGrpCrc
  toEnum 157 = ArmGrpDpvfp
  toEnum 158 = ArmGrpV6m
  toEnum 159 = ArmGrpEnding
  toEnum unmatched = error ("ArmInsnGroup.toEnum: Cannot match " ++ show unmatched)

{-# LINE 221 "src/Hapstone/Internal/Arm.chs" #-}