-- 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
               | ArmSysregIapsrNzcvq
               | ArmSysregEapsr
               | ArmSysregEapsrG
               | ArmSysregEapsrNzcvqg
               | ArmSysregEapsrNzcvq
               | ArmSysregXpsr
               | ArmSysregXpsrG
               | ArmSysregXpsrNzcvqg
               | ArmSysregXpsrNzcvq
               | ArmSysregIpsr
               | ArmSysregEpsr
               | ArmSysregIepsr
               | ArmSysregMsp
               | ArmSysregPsp
               | ArmSysregPrimask
               | ArmSysregBasepri
               | ArmSysregBasepriMax
               | ArmSysregFaultmask
               | ArmSysregControl
               | ArmSysregR8Usr
               | ArmSysregR9Usr
               | ArmSysregR10Usr
               | ArmSysregR11Usr
               | ArmSysregR12Usr
               | ArmSysregSpUsr
               | ArmSysregLrUsr
               | ArmSysregR8Fiq
               | ArmSysregR9Fiq
               | ArmSysregR10Fiq
               | ArmSysregR11Fiq
               | ArmSysregR12Fiq
               | ArmSysregSpFiq
               | ArmSysregLrFiq
               | ArmSysregLrIrq
               | ArmSysregSpIrq
               | ArmSysregLrSvc
               | ArmSysregSpSvc
               | ArmSysregLrAbt
               | ArmSysregSpAbt
               | ArmSysregLrUnd
               | ArmSysregSpUnd
               | ArmSysregLrMon
               | ArmSysregSpMon
               | ArmSysregElrHyp
               | ArmSysregSpHyp
               | ArmSysregSpsrFiq
               | ArmSysregSpsrIrq
               | ArmSysregSpsrSvc
               | ArmSysregSpsrAbt
               | ArmSysregSpsrUnd
               | ArmSysregSpsrMon
               | ArmSysregSpsrHyp
  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 = ArmSysregIapsrNzcvq
  succ ArmSysregIapsrNzcvq = ArmSysregEapsr
  succ ArmSysregEapsr = ArmSysregEapsrG
  succ ArmSysregEapsrG = ArmSysregEapsrNzcvqg
  succ ArmSysregEapsrNzcvqg = ArmSysregEapsrNzcvq
  succ ArmSysregEapsrNzcvq = ArmSysregXpsr
  succ ArmSysregXpsr = ArmSysregXpsrG
  succ ArmSysregXpsrG = ArmSysregXpsrNzcvqg
  succ ArmSysregXpsrNzcvqg = ArmSysregXpsrNzcvq
  succ ArmSysregXpsrNzcvq = 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 = ArmSysregR8Usr
  succ ArmSysregR8Usr = ArmSysregR9Usr
  succ ArmSysregR9Usr = ArmSysregR10Usr
  succ ArmSysregR10Usr = ArmSysregR11Usr
  succ ArmSysregR11Usr = ArmSysregR12Usr
  succ ArmSysregR12Usr = ArmSysregSpUsr
  succ ArmSysregSpUsr = ArmSysregLrUsr
  succ ArmSysregLrUsr = ArmSysregR8Fiq
  succ ArmSysregR8Fiq = ArmSysregR9Fiq
  succ ArmSysregR9Fiq = ArmSysregR10Fiq
  succ ArmSysregR10Fiq = ArmSysregR11Fiq
  succ ArmSysregR11Fiq = ArmSysregR12Fiq
  succ ArmSysregR12Fiq = ArmSysregSpFiq
  succ ArmSysregSpFiq = ArmSysregLrFiq
  succ ArmSysregLrFiq = ArmSysregLrIrq
  succ ArmSysregLrIrq = ArmSysregSpIrq
  succ ArmSysregSpIrq = ArmSysregLrSvc
  succ ArmSysregLrSvc = ArmSysregSpSvc
  succ ArmSysregSpSvc = ArmSysregLrAbt
  succ ArmSysregLrAbt = ArmSysregSpAbt
  succ ArmSysregSpAbt = ArmSysregLrUnd
  succ ArmSysregLrUnd = ArmSysregSpUnd
  succ ArmSysregSpUnd = ArmSysregLrMon
  succ ArmSysregLrMon = ArmSysregSpMon
  succ ArmSysregSpMon = ArmSysregElrHyp
  succ ArmSysregElrHyp = ArmSysregSpHyp
  succ ArmSysregSpHyp = ArmSysregSpsrFiq
  succ ArmSysregSpsrFiq = ArmSysregSpsrIrq
  succ ArmSysregSpsrIrq = ArmSysregSpsrSvc
  succ ArmSysregSpsrSvc = ArmSysregSpsrAbt
  succ ArmSysregSpsrAbt = ArmSysregSpsrUnd
  succ ArmSysregSpsrUnd = ArmSysregSpsrMon
  succ ArmSysregSpsrMon = ArmSysregSpsrHyp
  succ ArmSysregSpsrHyp = error "ArmSysreg.succ: ArmSysregSpsrHyp 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 ArmSysregIapsrNzcvq = ArmSysregIapsrNzcvqg
  pred ArmSysregEapsr = ArmSysregIapsrNzcvq
  pred ArmSysregEapsrG = ArmSysregEapsr
  pred ArmSysregEapsrNzcvqg = ArmSysregEapsrG
  pred ArmSysregEapsrNzcvq = ArmSysregEapsrNzcvqg
  pred ArmSysregXpsr = ArmSysregEapsrNzcvq
  pred ArmSysregXpsrG = ArmSysregXpsr
  pred ArmSysregXpsrNzcvqg = ArmSysregXpsrG
  pred ArmSysregXpsrNzcvq = ArmSysregXpsrNzcvqg
  pred ArmSysregIpsr = ArmSysregXpsrNzcvq
  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 ArmSysregR8Usr = ArmSysregControl
  pred ArmSysregR9Usr = ArmSysregR8Usr
  pred ArmSysregR10Usr = ArmSysregR9Usr
  pred ArmSysregR11Usr = ArmSysregR10Usr
  pred ArmSysregR12Usr = ArmSysregR11Usr
  pred ArmSysregSpUsr = ArmSysregR12Usr
  pred ArmSysregLrUsr = ArmSysregSpUsr
  pred ArmSysregR8Fiq = ArmSysregLrUsr
  pred ArmSysregR9Fiq = ArmSysregR8Fiq
  pred ArmSysregR10Fiq = ArmSysregR9Fiq
  pred ArmSysregR11Fiq = ArmSysregR10Fiq
  pred ArmSysregR12Fiq = ArmSysregR11Fiq
  pred ArmSysregSpFiq = ArmSysregR12Fiq
  pred ArmSysregLrFiq = ArmSysregSpFiq
  pred ArmSysregLrIrq = ArmSysregLrFiq
  pred ArmSysregSpIrq = ArmSysregLrIrq
  pred ArmSysregLrSvc = ArmSysregSpIrq
  pred ArmSysregSpSvc = ArmSysregLrSvc
  pred ArmSysregLrAbt = ArmSysregSpSvc
  pred ArmSysregSpAbt = ArmSysregLrAbt
  pred ArmSysregLrUnd = ArmSysregSpAbt
  pred ArmSysregSpUnd = ArmSysregLrUnd
  pred ArmSysregLrMon = ArmSysregSpUnd
  pred ArmSysregSpMon = ArmSysregLrMon
  pred ArmSysregElrHyp = ArmSysregSpMon
  pred ArmSysregSpHyp = ArmSysregElrHyp
  pred ArmSysregSpsrFiq = ArmSysregSpHyp
  pred ArmSysregSpsrIrq = ArmSysregSpsrFiq
  pred ArmSysregSpsrSvc = ArmSysregSpsrIrq
  pred ArmSysregSpsrAbt = ArmSysregSpsrSvc
  pred ArmSysregSpsrUnd = ArmSysregSpsrAbt
  pred ArmSysregSpsrMon = ArmSysregSpsrUnd
  pred ArmSysregSpsrHyp = ArmSysregSpsrMon
  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 ArmSysregSpsrHyp

  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 ArmSysregIapsrNzcvq = 263
  fromEnum ArmSysregEapsr = 264
  fromEnum ArmSysregEapsrG = 265
  fromEnum ArmSysregEapsrNzcvqg = 266
  fromEnum ArmSysregEapsrNzcvq = 267
  fromEnum ArmSysregXpsr = 268
  fromEnum ArmSysregXpsrG = 269
  fromEnum ArmSysregXpsrNzcvqg = 270
  fromEnum ArmSysregXpsrNzcvq = 271
  fromEnum ArmSysregIpsr = 272
  fromEnum ArmSysregEpsr = 273
  fromEnum ArmSysregIepsr = 274
  fromEnum ArmSysregMsp = 275
  fromEnum ArmSysregPsp = 276
  fromEnum ArmSysregPrimask = 277
  fromEnum ArmSysregBasepri = 278
  fromEnum ArmSysregBasepriMax = 279
  fromEnum ArmSysregFaultmask = 280
  fromEnum ArmSysregControl = 281
  fromEnum ArmSysregR8Usr = 282
  fromEnum ArmSysregR9Usr = 283
  fromEnum ArmSysregR10Usr = 284
  fromEnum ArmSysregR11Usr = 285
  fromEnum ArmSysregR12Usr = 286
  fromEnum ArmSysregSpUsr = 287
  fromEnum ArmSysregLrUsr = 288
  fromEnum ArmSysregR8Fiq = 289
  fromEnum ArmSysregR9Fiq = 290
  fromEnum ArmSysregR10Fiq = 291
  fromEnum ArmSysregR11Fiq = 292
  fromEnum ArmSysregR12Fiq = 293
  fromEnum ArmSysregSpFiq = 294
  fromEnum ArmSysregLrFiq = 295
  fromEnum ArmSysregLrIrq = 296
  fromEnum ArmSysregSpIrq = 297
  fromEnum ArmSysregLrSvc = 298
  fromEnum ArmSysregSpSvc = 299
  fromEnum ArmSysregLrAbt = 300
  fromEnum ArmSysregSpAbt = 301
  fromEnum ArmSysregLrUnd = 302
  fromEnum ArmSysregSpUnd = 303
  fromEnum ArmSysregLrMon = 304
  fromEnum ArmSysregSpMon = 305
  fromEnum ArmSysregElrHyp = 306
  fromEnum ArmSysregSpHyp = 307
  fromEnum ArmSysregSpsrFiq = 308
  fromEnum ArmSysregSpsrIrq = 309
  fromEnum ArmSysregSpsrSvc = 310
  fromEnum ArmSysregSpsrAbt = 311
  fromEnum ArmSysregSpsrUnd = 312
  fromEnum ArmSysregSpsrMon = 313
  fromEnum ArmSysregSpsrHyp = 314

  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 = ArmSysregIapsrNzcvq
  toEnum 264 = ArmSysregEapsr
  toEnum 265 = ArmSysregEapsrG
  toEnum 266 = ArmSysregEapsrNzcvqg
  toEnum 267 = ArmSysregEapsrNzcvq
  toEnum 268 = ArmSysregXpsr
  toEnum 269 = ArmSysregXpsrG
  toEnum 270 = ArmSysregXpsrNzcvqg
  toEnum 271 = ArmSysregXpsrNzcvq
  toEnum 272 = ArmSysregIpsr
  toEnum 273 = ArmSysregEpsr
  toEnum 274 = ArmSysregIepsr
  toEnum 275 = ArmSysregMsp
  toEnum 276 = ArmSysregPsp
  toEnum 277 = ArmSysregPrimask
  toEnum 278 = ArmSysregBasepri
  toEnum 279 = ArmSysregBasepriMax
  toEnum 280 = ArmSysregFaultmask
  toEnum 281 = ArmSysregControl
  toEnum 282 = ArmSysregR8Usr
  toEnum 283 = ArmSysregR9Usr
  toEnum 284 = ArmSysregR10Usr
  toEnum 285 = ArmSysregR11Usr
  toEnum 286 = ArmSysregR12Usr
  toEnum 287 = ArmSysregSpUsr
  toEnum 288 = ArmSysregLrUsr
  toEnum 289 = ArmSysregR8Fiq
  toEnum 290 = ArmSysregR9Fiq
  toEnum 291 = ArmSysregR10Fiq
  toEnum 292 = ArmSysregR11Fiq
  toEnum 293 = ArmSysregR12Fiq
  toEnum 294 = ArmSysregSpFiq
  toEnum 295 = ArmSysregLrFiq
  toEnum 296 = ArmSysregLrIrq
  toEnum 297 = ArmSysregSpIrq
  toEnum 298 = ArmSysregLrSvc
  toEnum 299 = ArmSysregSpSvc
  toEnum 300 = ArmSysregLrAbt
  toEnum 301 = ArmSysregSpAbt
  toEnum 302 = ArmSysregLrUnd
  toEnum 303 = ArmSysregSpUnd
  toEnum 304 = ArmSysregLrMon
  toEnum 305 = ArmSysregSpMon
  toEnum 306 = ArmSysregElrHyp
  toEnum 307 = ArmSysregSpHyp
  toEnum 308 = ArmSysregSpsrFiq
  toEnum 309 = ArmSysregSpsrIrq
  toEnum 310 = ArmSysregSpsrSvc
  toEnum 311 = ArmSysregSpsrAbt
  toEnum 312 = ArmSysregSpsrUnd
  toEnum 313 = ArmSysregSpsrMon
  toEnum 314 = ArmSysregSpsrHyp
  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" #-}


-- | 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 62 "src/Hapstone/Internal/Arm.chs" #-}


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

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

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

    peek p = ArmOpMemStruct
        <$> ((toEnum . 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.CInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 12 :: IO C2HSImp.CInt}) p)
        <*> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 16 :: IO C2HSImp.CInt}) p)
    poke p (ArmOpMemStruct b i s d l) = do
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum b)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 4 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum 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)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 16 (val :: C2HSImp.CInt)}) p (fromIntegral l)

-- | 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
    , access :: Word8 -- ^ access mode of operand
    , neon_lane :: Int8 -- ^ neon lane index for NEON instructions, else -1
    } 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 36 :: IO Word8)) -- subtracted
        <*> (peekByteOff p 37 :: IO Word8) -- access
        <*> (peekByteOff p 38 :: IO Int8) -- neon_lane
    poke p (CsArmOp vI (sh, shV) val sub acc neon) = 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 36 (fromBool sub :: Word8) -- subtracted
        pokeByteOff p 37 acc -- access
        pokeByteOff p 38 neon -- neon_lane

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

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

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

-- | ARM instruction groups
data ArmInsnGroup = ArmGrpInvalid
                  | ArmGrpJump
                  | ArmGrpCall
                  | ArmGrpInt
                  | ArmGrpPrivilege
                  | 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
                  | ArmGrpVirtualization
                  | ArmGrpEnding
  deriving (Show,Eq,Bounded)
instance Enum ArmInsnGroup where
  succ ArmGrpInvalid = ArmGrpJump
  succ ArmGrpJump = ArmGrpCall
  succ ArmGrpCall = ArmGrpInt
  succ ArmGrpInt = ArmGrpPrivilege
  succ ArmGrpPrivilege = 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 = ArmGrpVirtualization
  succ ArmGrpVirtualization = ArmGrpEnding
  succ ArmGrpEnding = error "ArmInsnGroup.succ: ArmGrpEnding has no successor"

  pred ArmGrpJump = ArmGrpInvalid
  pred ArmGrpCall = ArmGrpJump
  pred ArmGrpInt = ArmGrpCall
  pred ArmGrpPrivilege = ArmGrpInt
  pred ArmGrpCrypto = ArmGrpPrivilege
  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 ArmGrpVirtualization = ArmGrpV6m
  pred ArmGrpEnding = ArmGrpVirtualization
  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 ArmGrpCall = 2
  fromEnum ArmGrpInt = 4
  fromEnum ArmGrpPrivilege = 6
  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 ArmGrpVirtualization = 159
  fromEnum ArmGrpEnding = 160

  toEnum 0 = ArmGrpInvalid
  toEnum 1 = ArmGrpJump
  toEnum 2 = ArmGrpCall
  toEnum 4 = ArmGrpInt
  toEnum 6 = ArmGrpPrivilege
  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 = ArmGrpVirtualization
  toEnum 160 = ArmGrpEnding
  toEnum unmatched = error ("ArmInsnGroup.toEnum: Cannot match " ++ show unmatched)

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