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






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


import Control.Monad (join)

import Foreign
import Foreign.C.Types

-- | ARM64 shift type
data Arm64Shifter = Arm64SftInvalid
                  | Arm64SftLsl
                  | Arm64SftMsl
                  | Arm64SftLsr
                  | Arm64SftAsr
                  | Arm64SftRor
  deriving (Show,Eq,Bounded)
instance Enum Arm64Shifter where
  succ Arm64SftInvalid = Arm64SftLsl
  succ Arm64SftLsl = Arm64SftMsl
  succ Arm64SftMsl = Arm64SftLsr
  succ Arm64SftLsr = Arm64SftAsr
  succ Arm64SftAsr = Arm64SftRor
  succ Arm64SftRor = error "Arm64Shifter.succ: Arm64SftRor has no successor"

  pred Arm64SftLsl = Arm64SftInvalid
  pred Arm64SftMsl = Arm64SftLsl
  pred Arm64SftLsr = Arm64SftMsl
  pred Arm64SftAsr = Arm64SftLsr
  pred Arm64SftRor = Arm64SftAsr
  pred Arm64SftInvalid = error "Arm64Shifter.pred: Arm64SftInvalid 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 Arm64SftRor

  fromEnum Arm64SftInvalid = 0
  fromEnum Arm64SftLsl = 1
  fromEnum Arm64SftMsl = 2
  fromEnum Arm64SftLsr = 3
  fromEnum Arm64SftAsr = 4
  fromEnum Arm64SftRor = 5

  toEnum 0 = Arm64SftInvalid
  toEnum 1 = Arm64SftLsl
  toEnum 2 = Arm64SftMsl
  toEnum 3 = Arm64SftLsr
  toEnum 4 = Arm64SftAsr
  toEnum 5 = Arm64SftRor
  toEnum unmatched = error ("Arm64Shifter.toEnum: Cannot match " ++ show unmatched)

{-# LINE 34 "src/Hapstone/Internal/Arm64.chs" #-}

-- | ARM64 extender type
data Arm64Extender = Arm64ExtInvalid
                   | Arm64ExtUxtb
                   | Arm64ExtUxth
                   | Arm64ExtUxtw
                   | Arm64ExtUxtx
                   | Arm64ExtSxtb
                   | Arm64ExtSxth
                   | Arm64ExtSxtw
                   | Arm64ExtSxtx
  deriving (Show,Eq,Bounded)
instance Enum Arm64Extender where
  succ Arm64ExtInvalid = Arm64ExtUxtb
  succ Arm64ExtUxtb = Arm64ExtUxth
  succ Arm64ExtUxth = Arm64ExtUxtw
  succ Arm64ExtUxtw = Arm64ExtUxtx
  succ Arm64ExtUxtx = Arm64ExtSxtb
  succ Arm64ExtSxtb = Arm64ExtSxth
  succ Arm64ExtSxth = Arm64ExtSxtw
  succ Arm64ExtSxtw = Arm64ExtSxtx
  succ Arm64ExtSxtx = error "Arm64Extender.succ: Arm64ExtSxtx has no successor"

  pred Arm64ExtUxtb = Arm64ExtInvalid
  pred Arm64ExtUxth = Arm64ExtUxtb
  pred Arm64ExtUxtw = Arm64ExtUxth
  pred Arm64ExtUxtx = Arm64ExtUxtw
  pred Arm64ExtSxtb = Arm64ExtUxtx
  pred Arm64ExtSxth = Arm64ExtSxtb
  pred Arm64ExtSxtw = Arm64ExtSxth
  pred Arm64ExtSxtx = Arm64ExtSxtw
  pred Arm64ExtInvalid = error "Arm64Extender.pred: Arm64ExtInvalid 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 Arm64ExtSxtx

  fromEnum Arm64ExtInvalid = 0
  fromEnum Arm64ExtUxtb = 1
  fromEnum Arm64ExtUxth = 2
  fromEnum Arm64ExtUxtw = 3
  fromEnum Arm64ExtUxtx = 4
  fromEnum Arm64ExtSxtb = 5
  fromEnum Arm64ExtSxth = 6
  fromEnum Arm64ExtSxtw = 7
  fromEnum Arm64ExtSxtx = 8

  toEnum 0 = Arm64ExtInvalid
  toEnum 1 = Arm64ExtUxtb
  toEnum 2 = Arm64ExtUxth
  toEnum 3 = Arm64ExtUxtw
  toEnum 4 = Arm64ExtUxtx
  toEnum 5 = Arm64ExtSxtb
  toEnum 6 = Arm64ExtSxth
  toEnum 7 = Arm64ExtSxtw
  toEnum 8 = Arm64ExtSxtx
  toEnum unmatched = error ("Arm64Extender.toEnum: Cannot match " ++ show unmatched)

{-# LINE 37 "src/Hapstone/Internal/Arm64.chs" #-}

-- | ARM64 condition code
data Arm64ConditionCode = Arm64CcInvalid
                        | Arm64CcEq
                        | Arm64CcNe
                        | Arm64CcHs
                        | Arm64CcLo
                        | Arm64CcMi
                        | Arm64CcPl
                        | Arm64CcVs
                        | Arm64CcVc
                        | Arm64CcHi
                        | Arm64CcLs
                        | Arm64CcGe
                        | Arm64CcLt
                        | Arm64CcGt
                        | Arm64CcLe
                        | Arm64CcAl
                        | Arm64CcNv
  deriving (Show,Eq,Bounded)
instance Enum Arm64ConditionCode where
  succ Arm64CcInvalid = Arm64CcEq
  succ Arm64CcEq = Arm64CcNe
  succ Arm64CcNe = Arm64CcHs
  succ Arm64CcHs = Arm64CcLo
  succ Arm64CcLo = Arm64CcMi
  succ Arm64CcMi = Arm64CcPl
  succ Arm64CcPl = Arm64CcVs
  succ Arm64CcVs = Arm64CcVc
  succ Arm64CcVc = Arm64CcHi
  succ Arm64CcHi = Arm64CcLs
  succ Arm64CcLs = Arm64CcGe
  succ Arm64CcGe = Arm64CcLt
  succ Arm64CcLt = Arm64CcGt
  succ Arm64CcGt = Arm64CcLe
  succ Arm64CcLe = Arm64CcAl
  succ Arm64CcAl = Arm64CcNv
  succ Arm64CcNv = error "Arm64ConditionCode.succ: Arm64CcNv has no successor"

  pred Arm64CcEq = Arm64CcInvalid
  pred Arm64CcNe = Arm64CcEq
  pred Arm64CcHs = Arm64CcNe
  pred Arm64CcLo = Arm64CcHs
  pred Arm64CcMi = Arm64CcLo
  pred Arm64CcPl = Arm64CcMi
  pred Arm64CcVs = Arm64CcPl
  pred Arm64CcVc = Arm64CcVs
  pred Arm64CcHi = Arm64CcVc
  pred Arm64CcLs = Arm64CcHi
  pred Arm64CcGe = Arm64CcLs
  pred Arm64CcLt = Arm64CcGe
  pred Arm64CcGt = Arm64CcLt
  pred Arm64CcLe = Arm64CcGt
  pred Arm64CcAl = Arm64CcLe
  pred Arm64CcNv = Arm64CcAl
  pred Arm64CcInvalid = error "Arm64ConditionCode.pred: Arm64CcInvalid 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 Arm64CcNv

  fromEnum Arm64CcInvalid = 0
  fromEnum Arm64CcEq = 1
  fromEnum Arm64CcNe = 2
  fromEnum Arm64CcHs = 3
  fromEnum Arm64CcLo = 4
  fromEnum Arm64CcMi = 5
  fromEnum Arm64CcPl = 6
  fromEnum Arm64CcVs = 7
  fromEnum Arm64CcVc = 8
  fromEnum Arm64CcHi = 9
  fromEnum Arm64CcLs = 10
  fromEnum Arm64CcGe = 11
  fromEnum Arm64CcLt = 12
  fromEnum Arm64CcGt = 13
  fromEnum Arm64CcLe = 14
  fromEnum Arm64CcAl = 15
  fromEnum Arm64CcNv = 16

  toEnum 0 = Arm64CcInvalid
  toEnum 1 = Arm64CcEq
  toEnum 2 = Arm64CcNe
  toEnum 3 = Arm64CcHs
  toEnum 4 = Arm64CcLo
  toEnum 5 = Arm64CcMi
  toEnum 6 = Arm64CcPl
  toEnum 7 = Arm64CcVs
  toEnum 8 = Arm64CcVc
  toEnum 9 = Arm64CcHi
  toEnum 10 = Arm64CcLs
  toEnum 11 = Arm64CcGe
  toEnum 12 = Arm64CcLt
  toEnum 13 = Arm64CcGt
  toEnum 14 = Arm64CcLe
  toEnum 15 = Arm64CcAl
  toEnum 16 = Arm64CcNv
  toEnum unmatched = error ("Arm64ConditionCode.toEnum: Cannot match " ++ show unmatched)

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


-- | system registers
data Arm64Sysreg = Arm64SysregInvalid
                 | Arm64SysregMdrarEl1
                 | Arm64SysregOslsrEl1
                 | Arm64SysregDbgauthstatusEl1
                 | Arm64SysregTrcidr8
                 | Arm64SysregTrcidr9
                 | Arm64SysregTrcidr10
                 | Arm64SysregTrcstatr
                 | Arm64SysregTrcidr11
                 | Arm64SysregTrcidr12
                 | Arm64SysregTrcidr13
                 | Arm64SysregTrcidr0
                 | Arm64SysregTrcidr1
                 | Arm64SysregTrcidr2
                 | Arm64SysregTrcidr3
                 | Arm64SysregTrcidr4
                 | Arm64SysregTrcidr5
                 | Arm64SysregTrcidr6
                 | Arm64SysregTrcidr7
                 | Arm64SysregTrcoslsr
                 | Arm64SysregTrcpdsr
                 | Arm64SysregTrcdevid
                 | Arm64SysregTrcdevtype
                 | Arm64SysregTrcpidr4
                 | Arm64SysregTrcpidr5
                 | Arm64SysregTrcpidr6
                 | Arm64SysregTrcpidr7
                 | Arm64SysregTrcpidr0
                 | Arm64SysregTrcpidr1
                 | Arm64SysregTrcdevaff0
                 | Arm64SysregTrcpidr2
                 | Arm64SysregTrcdevaff1
                 | Arm64SysregTrcpidr3
                 | Arm64SysregTrccidr0
                 | Arm64SysregTrclsr
                 | Arm64SysregTrccidr1
                 | Arm64SysregTrcauthstatus
                 | Arm64SysregTrccidr2
                 | Arm64SysregTrcdevarch
                 | Arm64SysregTrccidr3
                 | Arm64SysregMdccsrEl0
                 | Arm64SysregDbgdtrrxEl0
                 | Arm64SysregMidrEl1
                 | Arm64SysregMpidrEl1
                 | Arm64SysregRevidrEl1
                 | Arm64SysregIdPfr0El1
                 | Arm64SysregIdPfr1El1
                 | Arm64SysregIdDfr0El1
                 | Arm64SysregIdAfr0El1
                 | Arm64SysregIdMmfr0El1
                 | Arm64SysregIdMmfr1El1
                 | Arm64SysregIdMmfr2El1
                 | Arm64SysregIdMmfr3El1
                 | Arm64SysregIdIsar0El1
                 | Arm64SysregIdIsar1El1
                 | Arm64SysregIdIsar2El1
                 | Arm64SysregIdIsar3El1
                 | Arm64SysregIdIsar4El1
                 | Arm64SysregIdIsar5El1
                 | Arm64SysregMvfr0El1
                 | Arm64SysregMvfr1El1
                 | Arm64SysregMvfr2El1
                 | Arm64SysregIdA64pfr0El1
                 | Arm64SysregIdA64pfr1El1
                 | Arm64SysregIdA64dfr0El1
                 | Arm64SysregIdA64dfr1El1
                 | Arm64SysregIdA64afr0El1
                 | Arm64SysregIdA64afr1El1
                 | Arm64SysregIdA64isar0El1
                 | Arm64SysregIdA64isar1El1
                 | Arm64SysregIdA64mmfr0El1
                 | Arm64SysregIdA64mmfr1El1
                 | Arm64SysregRvbarEl1
                 | Arm64SysregIsrEl1
                 | Arm64SysregIccIar0El1
                 | Arm64SysregIccHppir0El1
                 | Arm64SysregIccRprEl1
                 | Arm64SysregIccIar1El1
                 | Arm64SysregIccHppir1El1
                 | Arm64SysregCcsidrEl1
                 | Arm64SysregClidrEl1
                 | Arm64SysregAidrEl1
                 | Arm64SysregCtrEl0
                 | Arm64SysregDczidEl0
                 | Arm64SysregPmceid0El0
                 | Arm64SysregPmceid1El0
                 | Arm64SysregCntpctEl0
                 | Arm64SysregCntvctEl0
                 | Arm64SysregRvbarEl2
                 | Arm64SysregIchVtrEl2
                 | Arm64SysregIchEisrEl2
                 | Arm64SysregIchElsrEl2
                 | Arm64SysregRvbarEl3
  deriving (Show,Eq,Bounded)
instance Enum Arm64Sysreg where
  succ Arm64SysregInvalid = Arm64SysregMdrarEl1
  succ Arm64SysregMdrarEl1 = Arm64SysregOslsrEl1
  succ Arm64SysregOslsrEl1 = Arm64SysregDbgauthstatusEl1
  succ Arm64SysregDbgauthstatusEl1 = Arm64SysregTrcidr8
  succ Arm64SysregTrcidr8 = Arm64SysregTrcidr9
  succ Arm64SysregTrcidr9 = Arm64SysregTrcidr10
  succ Arm64SysregTrcidr10 = Arm64SysregTrcstatr
  succ Arm64SysregTrcstatr = Arm64SysregTrcidr11
  succ Arm64SysregTrcidr11 = Arm64SysregTrcidr12
  succ Arm64SysregTrcidr12 = Arm64SysregTrcidr13
  succ Arm64SysregTrcidr13 = Arm64SysregTrcidr0
  succ Arm64SysregTrcidr0 = Arm64SysregTrcidr1
  succ Arm64SysregTrcidr1 = Arm64SysregTrcidr2
  succ Arm64SysregTrcidr2 = Arm64SysregTrcidr3
  succ Arm64SysregTrcidr3 = Arm64SysregTrcidr4
  succ Arm64SysregTrcidr4 = Arm64SysregTrcidr5
  succ Arm64SysregTrcidr5 = Arm64SysregTrcidr6
  succ Arm64SysregTrcidr6 = Arm64SysregTrcidr7
  succ Arm64SysregTrcidr7 = Arm64SysregTrcoslsr
  succ Arm64SysregTrcoslsr = Arm64SysregTrcpdsr
  succ Arm64SysregTrcpdsr = Arm64SysregTrcdevid
  succ Arm64SysregTrcdevid = Arm64SysregTrcdevtype
  succ Arm64SysregTrcdevtype = Arm64SysregTrcpidr4
  succ Arm64SysregTrcpidr4 = Arm64SysregTrcpidr5
  succ Arm64SysregTrcpidr5 = Arm64SysregTrcpidr6
  succ Arm64SysregTrcpidr6 = Arm64SysregTrcpidr7
  succ Arm64SysregTrcpidr7 = Arm64SysregTrcpidr0
  succ Arm64SysregTrcpidr0 = Arm64SysregTrcpidr1
  succ Arm64SysregTrcpidr1 = Arm64SysregTrcdevaff0
  succ Arm64SysregTrcdevaff0 = Arm64SysregTrcpidr2
  succ Arm64SysregTrcpidr2 = Arm64SysregTrcdevaff1
  succ Arm64SysregTrcdevaff1 = Arm64SysregTrcpidr3
  succ Arm64SysregTrcpidr3 = Arm64SysregTrccidr0
  succ Arm64SysregTrccidr0 = Arm64SysregTrclsr
  succ Arm64SysregTrclsr = Arm64SysregTrccidr1
  succ Arm64SysregTrccidr1 = Arm64SysregTrcauthstatus
  succ Arm64SysregTrcauthstatus = Arm64SysregTrccidr2
  succ Arm64SysregTrccidr2 = Arm64SysregTrcdevarch
  succ Arm64SysregTrcdevarch = Arm64SysregTrccidr3
  succ Arm64SysregTrccidr3 = Arm64SysregMdccsrEl0
  succ Arm64SysregMdccsrEl0 = Arm64SysregDbgdtrrxEl0
  succ Arm64SysregDbgdtrrxEl0 = Arm64SysregMidrEl1
  succ Arm64SysregMidrEl1 = Arm64SysregMpidrEl1
  succ Arm64SysregMpidrEl1 = Arm64SysregRevidrEl1
  succ Arm64SysregRevidrEl1 = Arm64SysregIdPfr0El1
  succ Arm64SysregIdPfr0El1 = Arm64SysregIdPfr1El1
  succ Arm64SysregIdPfr1El1 = Arm64SysregIdDfr0El1
  succ Arm64SysregIdDfr0El1 = Arm64SysregIdAfr0El1
  succ Arm64SysregIdAfr0El1 = Arm64SysregIdMmfr0El1
  succ Arm64SysregIdMmfr0El1 = Arm64SysregIdMmfr1El1
  succ Arm64SysregIdMmfr1El1 = Arm64SysregIdMmfr2El1
  succ Arm64SysregIdMmfr2El1 = Arm64SysregIdMmfr3El1
  succ Arm64SysregIdMmfr3El1 = Arm64SysregIdIsar0El1
  succ Arm64SysregIdIsar0El1 = Arm64SysregIdIsar1El1
  succ Arm64SysregIdIsar1El1 = Arm64SysregIdIsar2El1
  succ Arm64SysregIdIsar2El1 = Arm64SysregIdIsar3El1
  succ Arm64SysregIdIsar3El1 = Arm64SysregIdIsar4El1
  succ Arm64SysregIdIsar4El1 = Arm64SysregIdIsar5El1
  succ Arm64SysregIdIsar5El1 = Arm64SysregMvfr0El1
  succ Arm64SysregMvfr0El1 = Arm64SysregMvfr1El1
  succ Arm64SysregMvfr1El1 = Arm64SysregMvfr2El1
  succ Arm64SysregMvfr2El1 = Arm64SysregIdA64pfr0El1
  succ Arm64SysregIdA64pfr0El1 = Arm64SysregIdA64pfr1El1
  succ Arm64SysregIdA64pfr1El1 = Arm64SysregIdA64dfr0El1
  succ Arm64SysregIdA64dfr0El1 = Arm64SysregIdA64dfr1El1
  succ Arm64SysregIdA64dfr1El1 = Arm64SysregIdA64afr0El1
  succ Arm64SysregIdA64afr0El1 = Arm64SysregIdA64afr1El1
  succ Arm64SysregIdA64afr1El1 = Arm64SysregIdA64isar0El1
  succ Arm64SysregIdA64isar0El1 = Arm64SysregIdA64isar1El1
  succ Arm64SysregIdA64isar1El1 = Arm64SysregIdA64mmfr0El1
  succ Arm64SysregIdA64mmfr0El1 = Arm64SysregIdA64mmfr1El1
  succ Arm64SysregIdA64mmfr1El1 = Arm64SysregRvbarEl1
  succ Arm64SysregRvbarEl1 = Arm64SysregIsrEl1
  succ Arm64SysregIsrEl1 = Arm64SysregIccIar0El1
  succ Arm64SysregIccIar0El1 = Arm64SysregIccHppir0El1
  succ Arm64SysregIccHppir0El1 = Arm64SysregIccRprEl1
  succ Arm64SysregIccRprEl1 = Arm64SysregIccIar1El1
  succ Arm64SysregIccIar1El1 = Arm64SysregIccHppir1El1
  succ Arm64SysregIccHppir1El1 = Arm64SysregCcsidrEl1
  succ Arm64SysregCcsidrEl1 = Arm64SysregClidrEl1
  succ Arm64SysregClidrEl1 = Arm64SysregAidrEl1
  succ Arm64SysregAidrEl1 = Arm64SysregCtrEl0
  succ Arm64SysregCtrEl0 = Arm64SysregDczidEl0
  succ Arm64SysregDczidEl0 = Arm64SysregPmceid0El0
  succ Arm64SysregPmceid0El0 = Arm64SysregPmceid1El0
  succ Arm64SysregPmceid1El0 = Arm64SysregCntpctEl0
  succ Arm64SysregCntpctEl0 = Arm64SysregCntvctEl0
  succ Arm64SysregCntvctEl0 = Arm64SysregRvbarEl2
  succ Arm64SysregRvbarEl2 = Arm64SysregIchVtrEl2
  succ Arm64SysregIchVtrEl2 = Arm64SysregIchEisrEl2
  succ Arm64SysregIchEisrEl2 = Arm64SysregIchElsrEl2
  succ Arm64SysregIchElsrEl2 = Arm64SysregRvbarEl3
  succ Arm64SysregRvbarEl3 = error "Arm64Sysreg.succ: Arm64SysregRvbarEl3 has no successor"

  pred Arm64SysregMdrarEl1 = Arm64SysregInvalid
  pred Arm64SysregOslsrEl1 = Arm64SysregMdrarEl1
  pred Arm64SysregDbgauthstatusEl1 = Arm64SysregOslsrEl1
  pred Arm64SysregTrcidr8 = Arm64SysregDbgauthstatusEl1
  pred Arm64SysregTrcidr9 = Arm64SysregTrcidr8
  pred Arm64SysregTrcidr10 = Arm64SysregTrcidr9
  pred Arm64SysregTrcstatr = Arm64SysregTrcidr10
  pred Arm64SysregTrcidr11 = Arm64SysregTrcstatr
  pred Arm64SysregTrcidr12 = Arm64SysregTrcidr11
  pred Arm64SysregTrcidr13 = Arm64SysregTrcidr12
  pred Arm64SysregTrcidr0 = Arm64SysregTrcidr13
  pred Arm64SysregTrcidr1 = Arm64SysregTrcidr0
  pred Arm64SysregTrcidr2 = Arm64SysregTrcidr1
  pred Arm64SysregTrcidr3 = Arm64SysregTrcidr2
  pred Arm64SysregTrcidr4 = Arm64SysregTrcidr3
  pred Arm64SysregTrcidr5 = Arm64SysregTrcidr4
  pred Arm64SysregTrcidr6 = Arm64SysregTrcidr5
  pred Arm64SysregTrcidr7 = Arm64SysregTrcidr6
  pred Arm64SysregTrcoslsr = Arm64SysregTrcidr7
  pred Arm64SysregTrcpdsr = Arm64SysregTrcoslsr
  pred Arm64SysregTrcdevid = Arm64SysregTrcpdsr
  pred Arm64SysregTrcdevtype = Arm64SysregTrcdevid
  pred Arm64SysregTrcpidr4 = Arm64SysregTrcdevtype
  pred Arm64SysregTrcpidr5 = Arm64SysregTrcpidr4
  pred Arm64SysregTrcpidr6 = Arm64SysregTrcpidr5
  pred Arm64SysregTrcpidr7 = Arm64SysregTrcpidr6
  pred Arm64SysregTrcpidr0 = Arm64SysregTrcpidr7
  pred Arm64SysregTrcpidr1 = Arm64SysregTrcpidr0
  pred Arm64SysregTrcdevaff0 = Arm64SysregTrcpidr1
  pred Arm64SysregTrcpidr2 = Arm64SysregTrcdevaff0
  pred Arm64SysregTrcdevaff1 = Arm64SysregTrcpidr2
  pred Arm64SysregTrcpidr3 = Arm64SysregTrcdevaff1
  pred Arm64SysregTrccidr0 = Arm64SysregTrcpidr3
  pred Arm64SysregTrclsr = Arm64SysregTrccidr0
  pred Arm64SysregTrccidr1 = Arm64SysregTrclsr
  pred Arm64SysregTrcauthstatus = Arm64SysregTrccidr1
  pred Arm64SysregTrccidr2 = Arm64SysregTrcauthstatus
  pred Arm64SysregTrcdevarch = Arm64SysregTrccidr2
  pred Arm64SysregTrccidr3 = Arm64SysregTrcdevarch
  pred Arm64SysregMdccsrEl0 = Arm64SysregTrccidr3
  pred Arm64SysregDbgdtrrxEl0 = Arm64SysregMdccsrEl0
  pred Arm64SysregMidrEl1 = Arm64SysregDbgdtrrxEl0
  pred Arm64SysregMpidrEl1 = Arm64SysregMidrEl1
  pred Arm64SysregRevidrEl1 = Arm64SysregMpidrEl1
  pred Arm64SysregIdPfr0El1 = Arm64SysregRevidrEl1
  pred Arm64SysregIdPfr1El1 = Arm64SysregIdPfr0El1
  pred Arm64SysregIdDfr0El1 = Arm64SysregIdPfr1El1
  pred Arm64SysregIdAfr0El1 = Arm64SysregIdDfr0El1
  pred Arm64SysregIdMmfr0El1 = Arm64SysregIdAfr0El1
  pred Arm64SysregIdMmfr1El1 = Arm64SysregIdMmfr0El1
  pred Arm64SysregIdMmfr2El1 = Arm64SysregIdMmfr1El1
  pred Arm64SysregIdMmfr3El1 = Arm64SysregIdMmfr2El1
  pred Arm64SysregIdIsar0El1 = Arm64SysregIdMmfr3El1
  pred Arm64SysregIdIsar1El1 = Arm64SysregIdIsar0El1
  pred Arm64SysregIdIsar2El1 = Arm64SysregIdIsar1El1
  pred Arm64SysregIdIsar3El1 = Arm64SysregIdIsar2El1
  pred Arm64SysregIdIsar4El1 = Arm64SysregIdIsar3El1
  pred Arm64SysregIdIsar5El1 = Arm64SysregIdIsar4El1
  pred Arm64SysregMvfr0El1 = Arm64SysregIdIsar5El1
  pred Arm64SysregMvfr1El1 = Arm64SysregMvfr0El1
  pred Arm64SysregMvfr2El1 = Arm64SysregMvfr1El1
  pred Arm64SysregIdA64pfr0El1 = Arm64SysregMvfr2El1
  pred Arm64SysregIdA64pfr1El1 = Arm64SysregIdA64pfr0El1
  pred Arm64SysregIdA64dfr0El1 = Arm64SysregIdA64pfr1El1
  pred Arm64SysregIdA64dfr1El1 = Arm64SysregIdA64dfr0El1
  pred Arm64SysregIdA64afr0El1 = Arm64SysregIdA64dfr1El1
  pred Arm64SysregIdA64afr1El1 = Arm64SysregIdA64afr0El1
  pred Arm64SysregIdA64isar0El1 = Arm64SysregIdA64afr1El1
  pred Arm64SysregIdA64isar1El1 = Arm64SysregIdA64isar0El1
  pred Arm64SysregIdA64mmfr0El1 = Arm64SysregIdA64isar1El1
  pred Arm64SysregIdA64mmfr1El1 = Arm64SysregIdA64mmfr0El1
  pred Arm64SysregRvbarEl1 = Arm64SysregIdA64mmfr1El1
  pred Arm64SysregIsrEl1 = Arm64SysregRvbarEl1
  pred Arm64SysregIccIar0El1 = Arm64SysregIsrEl1
  pred Arm64SysregIccHppir0El1 = Arm64SysregIccIar0El1
  pred Arm64SysregIccRprEl1 = Arm64SysregIccHppir0El1
  pred Arm64SysregIccIar1El1 = Arm64SysregIccRprEl1
  pred Arm64SysregIccHppir1El1 = Arm64SysregIccIar1El1
  pred Arm64SysregCcsidrEl1 = Arm64SysregIccHppir1El1
  pred Arm64SysregClidrEl1 = Arm64SysregCcsidrEl1
  pred Arm64SysregAidrEl1 = Arm64SysregClidrEl1
  pred Arm64SysregCtrEl0 = Arm64SysregAidrEl1
  pred Arm64SysregDczidEl0 = Arm64SysregCtrEl0
  pred Arm64SysregPmceid0El0 = Arm64SysregDczidEl0
  pred Arm64SysregPmceid1El0 = Arm64SysregPmceid0El0
  pred Arm64SysregCntpctEl0 = Arm64SysregPmceid1El0
  pred Arm64SysregCntvctEl0 = Arm64SysregCntpctEl0
  pred Arm64SysregRvbarEl2 = Arm64SysregCntvctEl0
  pred Arm64SysregIchVtrEl2 = Arm64SysregRvbarEl2
  pred Arm64SysregIchEisrEl2 = Arm64SysregIchVtrEl2
  pred Arm64SysregIchElsrEl2 = Arm64SysregIchEisrEl2
  pred Arm64SysregRvbarEl3 = Arm64SysregIchElsrEl2
  pred Arm64SysregInvalid = error "Arm64Sysreg.pred: Arm64SysregInvalid 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 Arm64SysregRvbarEl3

  fromEnum Arm64SysregInvalid = 0
  fromEnum Arm64SysregMdrarEl1 = 32896
  fromEnum Arm64SysregOslsrEl1 = 32908
  fromEnum Arm64SysregDbgauthstatusEl1 = 33782
  fromEnum Arm64SysregTrcidr8 = 34822
  fromEnum Arm64SysregTrcidr9 = 34830
  fromEnum Arm64SysregTrcidr10 = 34838
  fromEnum Arm64SysregTrcstatr = 34840
  fromEnum Arm64SysregTrcidr11 = 34846
  fromEnum Arm64SysregTrcidr12 = 34854
  fromEnum Arm64SysregTrcidr13 = 34862
  fromEnum Arm64SysregTrcidr0 = 34887
  fromEnum Arm64SysregTrcidr1 = 34895
  fromEnum Arm64SysregTrcidr2 = 34903
  fromEnum Arm64SysregTrcidr3 = 34911
  fromEnum Arm64SysregTrcidr4 = 34919
  fromEnum Arm64SysregTrcidr5 = 34927
  fromEnum Arm64SysregTrcidr6 = 34935
  fromEnum Arm64SysregTrcidr7 = 34943
  fromEnum Arm64SysregTrcoslsr = 34956
  fromEnum Arm64SysregTrcpdsr = 34988
  fromEnum Arm64SysregTrcdevid = 35735
  fromEnum Arm64SysregTrcdevtype = 35743
  fromEnum Arm64SysregTrcpidr4 = 35751
  fromEnum Arm64SysregTrcpidr5 = 35759
  fromEnum Arm64SysregTrcpidr6 = 35767
  fromEnum Arm64SysregTrcpidr7 = 35775
  fromEnum Arm64SysregTrcpidr0 = 35783
  fromEnum Arm64SysregTrcpidr1 = 35791
  fromEnum Arm64SysregTrcdevaff0 = 35798
  fromEnum Arm64SysregTrcpidr2 = 35799
  fromEnum Arm64SysregTrcdevaff1 = 35806
  fromEnum Arm64SysregTrcpidr3 = 35807
  fromEnum Arm64SysregTrccidr0 = 35815
  fromEnum Arm64SysregTrclsr = 35822
  fromEnum Arm64SysregTrccidr1 = 35823
  fromEnum Arm64SysregTrcauthstatus = 35830
  fromEnum Arm64SysregTrccidr2 = 35831
  fromEnum Arm64SysregTrcdevarch = 35838
  fromEnum Arm64SysregTrccidr3 = 35839
  fromEnum Arm64SysregMdccsrEl0 = 38920
  fromEnum Arm64SysregDbgdtrrxEl0 = 38952
  fromEnum Arm64SysregMidrEl1 = 49152
  fromEnum Arm64SysregMpidrEl1 = 49157
  fromEnum Arm64SysregRevidrEl1 = 49158
  fromEnum Arm64SysregIdPfr0El1 = 49160
  fromEnum Arm64SysregIdPfr1El1 = 49161
  fromEnum Arm64SysregIdDfr0El1 = 49162
  fromEnum Arm64SysregIdAfr0El1 = 49163
  fromEnum Arm64SysregIdMmfr0El1 = 49164
  fromEnum Arm64SysregIdMmfr1El1 = 49165
  fromEnum Arm64SysregIdMmfr2El1 = 49166
  fromEnum Arm64SysregIdMmfr3El1 = 49167
  fromEnum Arm64SysregIdIsar0El1 = 49168
  fromEnum Arm64SysregIdIsar1El1 = 49169
  fromEnum Arm64SysregIdIsar2El1 = 49170
  fromEnum Arm64SysregIdIsar3El1 = 49171
  fromEnum Arm64SysregIdIsar4El1 = 49172
  fromEnum Arm64SysregIdIsar5El1 = 49173
  fromEnum Arm64SysregMvfr0El1 = 49176
  fromEnum Arm64SysregMvfr1El1 = 49177
  fromEnum Arm64SysregMvfr2El1 = 49178
  fromEnum Arm64SysregIdA64pfr0El1 = 49184
  fromEnum Arm64SysregIdA64pfr1El1 = 49185
  fromEnum Arm64SysregIdA64dfr0El1 = 49192
  fromEnum Arm64SysregIdA64dfr1El1 = 49193
  fromEnum Arm64SysregIdA64afr0El1 = 49196
  fromEnum Arm64SysregIdA64afr1El1 = 49197
  fromEnum Arm64SysregIdA64isar0El1 = 49200
  fromEnum Arm64SysregIdA64isar1El1 = 49201
  fromEnum Arm64SysregIdA64mmfr0El1 = 49208
  fromEnum Arm64SysregIdA64mmfr1El1 = 49209
  fromEnum Arm64SysregRvbarEl1 = 50689
  fromEnum Arm64SysregIsrEl1 = 50696
  fromEnum Arm64SysregIccIar0El1 = 50752
  fromEnum Arm64SysregIccHppir0El1 = 50754
  fromEnum Arm64SysregIccRprEl1 = 50779
  fromEnum Arm64SysregIccIar1El1 = 50784
  fromEnum Arm64SysregIccHppir1El1 = 50786
  fromEnum Arm64SysregCcsidrEl1 = 51200
  fromEnum Arm64SysregClidrEl1 = 51201
  fromEnum Arm64SysregAidrEl1 = 51207
  fromEnum Arm64SysregCtrEl0 = 55297
  fromEnum Arm64SysregDczidEl0 = 55303
  fromEnum Arm64SysregPmceid0El0 = 56550
  fromEnum Arm64SysregPmceid1El0 = 56551
  fromEnum Arm64SysregCntpctEl0 = 57089
  fromEnum Arm64SysregCntvctEl0 = 57090
  fromEnum Arm64SysregRvbarEl2 = 58881
  fromEnum Arm64SysregIchVtrEl2 = 58969
  fromEnum Arm64SysregIchEisrEl2 = 58971
  fromEnum Arm64SysregIchElsrEl2 = 58973
  fromEnum Arm64SysregRvbarEl3 = 62977

  toEnum 0 = Arm64SysregInvalid
  toEnum 32896 = Arm64SysregMdrarEl1
  toEnum 32908 = Arm64SysregOslsrEl1
  toEnum 33782 = Arm64SysregDbgauthstatusEl1
  toEnum 34822 = Arm64SysregTrcidr8
  toEnum 34830 = Arm64SysregTrcidr9
  toEnum 34838 = Arm64SysregTrcidr10
  toEnum 34840 = Arm64SysregTrcstatr
  toEnum 34846 = Arm64SysregTrcidr11
  toEnum 34854 = Arm64SysregTrcidr12
  toEnum 34862 = Arm64SysregTrcidr13
  toEnum 34887 = Arm64SysregTrcidr0
  toEnum 34895 = Arm64SysregTrcidr1
  toEnum 34903 = Arm64SysregTrcidr2
  toEnum 34911 = Arm64SysregTrcidr3
  toEnum 34919 = Arm64SysregTrcidr4
  toEnum 34927 = Arm64SysregTrcidr5
  toEnum 34935 = Arm64SysregTrcidr6
  toEnum 34943 = Arm64SysregTrcidr7
  toEnum 34956 = Arm64SysregTrcoslsr
  toEnum 34988 = Arm64SysregTrcpdsr
  toEnum 35735 = Arm64SysregTrcdevid
  toEnum 35743 = Arm64SysregTrcdevtype
  toEnum 35751 = Arm64SysregTrcpidr4
  toEnum 35759 = Arm64SysregTrcpidr5
  toEnum 35767 = Arm64SysregTrcpidr6
  toEnum 35775 = Arm64SysregTrcpidr7
  toEnum 35783 = Arm64SysregTrcpidr0
  toEnum 35791 = Arm64SysregTrcpidr1
  toEnum 35798 = Arm64SysregTrcdevaff0
  toEnum 35799 = Arm64SysregTrcpidr2
  toEnum 35806 = Arm64SysregTrcdevaff1
  toEnum 35807 = Arm64SysregTrcpidr3
  toEnum 35815 = Arm64SysregTrccidr0
  toEnum 35822 = Arm64SysregTrclsr
  toEnum 35823 = Arm64SysregTrccidr1
  toEnum 35830 = Arm64SysregTrcauthstatus
  toEnum 35831 = Arm64SysregTrccidr2
  toEnum 35838 = Arm64SysregTrcdevarch
  toEnum 35839 = Arm64SysregTrccidr3
  toEnum 38920 = Arm64SysregMdccsrEl0
  toEnum 38952 = Arm64SysregDbgdtrrxEl0
  toEnum 49152 = Arm64SysregMidrEl1
  toEnum 49157 = Arm64SysregMpidrEl1
  toEnum 49158 = Arm64SysregRevidrEl1
  toEnum 49160 = Arm64SysregIdPfr0El1
  toEnum 49161 = Arm64SysregIdPfr1El1
  toEnum 49162 = Arm64SysregIdDfr0El1
  toEnum 49163 = Arm64SysregIdAfr0El1
  toEnum 49164 = Arm64SysregIdMmfr0El1
  toEnum 49165 = Arm64SysregIdMmfr1El1
  toEnum 49166 = Arm64SysregIdMmfr2El1
  toEnum 49167 = Arm64SysregIdMmfr3El1
  toEnum 49168 = Arm64SysregIdIsar0El1
  toEnum 49169 = Arm64SysregIdIsar1El1
  toEnum 49170 = Arm64SysregIdIsar2El1
  toEnum 49171 = Arm64SysregIdIsar3El1
  toEnum 49172 = Arm64SysregIdIsar4El1
  toEnum 49173 = Arm64SysregIdIsar5El1
  toEnum 49176 = Arm64SysregMvfr0El1
  toEnum 49177 = Arm64SysregMvfr1El1
  toEnum 49178 = Arm64SysregMvfr2El1
  toEnum 49184 = Arm64SysregIdA64pfr0El1
  toEnum 49185 = Arm64SysregIdA64pfr1El1
  toEnum 49192 = Arm64SysregIdA64dfr0El1
  toEnum 49193 = Arm64SysregIdA64dfr1El1
  toEnum 49196 = Arm64SysregIdA64afr0El1
  toEnum 49197 = Arm64SysregIdA64afr1El1
  toEnum 49200 = Arm64SysregIdA64isar0El1
  toEnum 49201 = Arm64SysregIdA64isar1El1
  toEnum 49208 = Arm64SysregIdA64mmfr0El1
  toEnum 49209 = Arm64SysregIdA64mmfr1El1
  toEnum 50689 = Arm64SysregRvbarEl1
  toEnum 50696 = Arm64SysregIsrEl1
  toEnum 50752 = Arm64SysregIccIar0El1
  toEnum 50754 = Arm64SysregIccHppir0El1
  toEnum 50779 = Arm64SysregIccRprEl1
  toEnum 50784 = Arm64SysregIccIar1El1
  toEnum 50786 = Arm64SysregIccHppir1El1
  toEnum 51200 = Arm64SysregCcsidrEl1
  toEnum 51201 = Arm64SysregClidrEl1
  toEnum 51207 = Arm64SysregAidrEl1
  toEnum 55297 = Arm64SysregCtrEl0
  toEnum 55303 = Arm64SysregDczidEl0
  toEnum 56550 = Arm64SysregPmceid0El0
  toEnum 56551 = Arm64SysregPmceid1El0
  toEnum 57089 = Arm64SysregCntpctEl0
  toEnum 57090 = Arm64SysregCntvctEl0
  toEnum 58881 = Arm64SysregRvbarEl2
  toEnum 58969 = Arm64SysregIchVtrEl2
  toEnum 58971 = Arm64SysregIchEisrEl2
  toEnum 58973 = Arm64SysregIchElsrEl2
  toEnum 62977 = Arm64SysregRvbarEl3
  toEnum unmatched = error ("Arm64Sysreg.toEnum: Cannot match " ++ show unmatched)

{-# LINE 44 "src/Hapstone/Internal/Arm64.chs" #-}

-- | more system registers
data Arm64MsrReg = Arm64SysregOslarEl1
                 | Arm64SysregTrcoslar
                 | Arm64SysregTrclar
                 | Arm64SysregDbgdtrtxEl0
                 | Arm64SysregIccEoir0El1
                 | Arm64SysregIccDirEl1
                 | Arm64SysregIccSgi1rEl1
                 | Arm64SysregIccAsgi1rEl1
                 | Arm64SysregIccSgi0rEl1
                 | Arm64SysregIccEoir1El1
                 | Arm64SysregPmswincEl0
  deriving (Show,Eq,Bounded)
instance Enum Arm64MsrReg where
  succ Arm64SysregOslarEl1 = Arm64SysregTrcoslar
  succ Arm64SysregTrcoslar = Arm64SysregTrclar
  succ Arm64SysregTrclar = Arm64SysregDbgdtrtxEl0
  succ Arm64SysregDbgdtrtxEl0 = Arm64SysregIccEoir0El1
  succ Arm64SysregIccEoir0El1 = Arm64SysregIccDirEl1
  succ Arm64SysregIccDirEl1 = Arm64SysregIccSgi1rEl1
  succ Arm64SysregIccSgi1rEl1 = Arm64SysregIccAsgi1rEl1
  succ Arm64SysregIccAsgi1rEl1 = Arm64SysregIccSgi0rEl1
  succ Arm64SysregIccSgi0rEl1 = Arm64SysregIccEoir1El1
  succ Arm64SysregIccEoir1El1 = Arm64SysregPmswincEl0
  succ Arm64SysregPmswincEl0 = error "Arm64MsrReg.succ: Arm64SysregPmswincEl0 has no successor"

  pred Arm64SysregTrcoslar = Arm64SysregOslarEl1
  pred Arm64SysregTrclar = Arm64SysregTrcoslar
  pred Arm64SysregDbgdtrtxEl0 = Arm64SysregTrclar
  pred Arm64SysregIccEoir0El1 = Arm64SysregDbgdtrtxEl0
  pred Arm64SysregIccDirEl1 = Arm64SysregIccEoir0El1
  pred Arm64SysregIccSgi1rEl1 = Arm64SysregIccDirEl1
  pred Arm64SysregIccAsgi1rEl1 = Arm64SysregIccSgi1rEl1
  pred Arm64SysregIccSgi0rEl1 = Arm64SysregIccAsgi1rEl1
  pred Arm64SysregIccEoir1El1 = Arm64SysregIccSgi0rEl1
  pred Arm64SysregPmswincEl0 = Arm64SysregIccEoir1El1
  pred Arm64SysregOslarEl1 = error "Arm64MsrReg.pred: Arm64SysregOslarEl1 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 Arm64SysregPmswincEl0

  fromEnum Arm64SysregOslarEl1 = 32900
  fromEnum Arm64SysregTrcoslar = 34948
  fromEnum Arm64SysregTrclar = 35814
  fromEnum Arm64SysregDbgdtrtxEl0 = 38952
  fromEnum Arm64SysregIccEoir0El1 = 50753
  fromEnum Arm64SysregIccDirEl1 = 50777
  fromEnum Arm64SysregIccSgi1rEl1 = 50781
  fromEnum Arm64SysregIccAsgi1rEl1 = 50782
  fromEnum Arm64SysregIccSgi0rEl1 = 50783
  fromEnum Arm64SysregIccEoir1El1 = 50785
  fromEnum Arm64SysregPmswincEl0 = 56548

  toEnum 32900 = Arm64SysregOslarEl1
  toEnum 34948 = Arm64SysregTrcoslar
  toEnum 35814 = Arm64SysregTrclar
  toEnum 38952 = Arm64SysregDbgdtrtxEl0
  toEnum 50753 = Arm64SysregIccEoir0El1
  toEnum 50777 = Arm64SysregIccDirEl1
  toEnum 50781 = Arm64SysregIccSgi1rEl1
  toEnum 50782 = Arm64SysregIccAsgi1rEl1
  toEnum 50783 = Arm64SysregIccSgi0rEl1
  toEnum 50785 = Arm64SysregIccEoir1El1
  toEnum 56548 = Arm64SysregPmswincEl0
  toEnum unmatched = error ("Arm64MsrReg.toEnum: Cannot match " ++ show unmatched)

{-# LINE 47 "src/Hapstone/Internal/Arm64.chs" #-}


-- | system pstate field (MSR instructions)
data Arm64Pstate = Arm64PstateInvalid
                 | Arm64PstateSpsel
                 | Arm64PstateDaifset
                 | Arm64PstateDaifclr
  deriving (Show,Eq,Bounded)
instance Enum Arm64Pstate where
  succ Arm64PstateInvalid = Arm64PstateSpsel
  succ Arm64PstateSpsel = Arm64PstateDaifset
  succ Arm64PstateDaifset = Arm64PstateDaifclr
  succ Arm64PstateDaifclr = error "Arm64Pstate.succ: Arm64PstateDaifclr has no successor"

  pred Arm64PstateSpsel = Arm64PstateInvalid
  pred Arm64PstateDaifset = Arm64PstateSpsel
  pred Arm64PstateDaifclr = Arm64PstateDaifset
  pred Arm64PstateInvalid = error "Arm64Pstate.pred: Arm64PstateInvalid 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 Arm64PstateDaifclr

  fromEnum Arm64PstateInvalid = 0
  fromEnum Arm64PstateSpsel = 5
  fromEnum Arm64PstateDaifset = 30
  fromEnum Arm64PstateDaifclr = 31

  toEnum 0 = Arm64PstateInvalid
  toEnum 5 = Arm64PstateSpsel
  toEnum 30 = Arm64PstateDaifset
  toEnum 31 = Arm64PstateDaifclr
  toEnum unmatched = error ("Arm64Pstate.toEnum: Cannot match " ++ show unmatched)

{-# LINE 51 "src/Hapstone/Internal/Arm64.chs" #-}


-- | vector arrangement specifier (floating point/advanced SIMD instructions)
data Arm64Vas = Arm64VasInvalid
              | Arm64Vas8b
              | Arm64Vas16b
              | Arm64Vas4h
              | Arm64Vas8h
              | Arm64Vas2s
              | Arm64Vas4s
              | Arm64Vas1d
              | Arm64Vas2d
              | Arm64Vas1q
  deriving (Show,Eq,Bounded)
instance Enum Arm64Vas where
  succ Arm64VasInvalid = Arm64Vas8b
  succ Arm64Vas8b = Arm64Vas16b
  succ Arm64Vas16b = Arm64Vas4h
  succ Arm64Vas4h = Arm64Vas8h
  succ Arm64Vas8h = Arm64Vas2s
  succ Arm64Vas2s = Arm64Vas4s
  succ Arm64Vas4s = Arm64Vas1d
  succ Arm64Vas1d = Arm64Vas2d
  succ Arm64Vas2d = Arm64Vas1q
  succ Arm64Vas1q = error "Arm64Vas.succ: Arm64Vas1q has no successor"

  pred Arm64Vas8b = Arm64VasInvalid
  pred Arm64Vas16b = Arm64Vas8b
  pred Arm64Vas4h = Arm64Vas16b
  pred Arm64Vas8h = Arm64Vas4h
  pred Arm64Vas2s = Arm64Vas8h
  pred Arm64Vas4s = Arm64Vas2s
  pred Arm64Vas1d = Arm64Vas4s
  pred Arm64Vas2d = Arm64Vas1d
  pred Arm64Vas1q = Arm64Vas2d
  pred Arm64VasInvalid = error "Arm64Vas.pred: Arm64VasInvalid 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 Arm64Vas1q

  fromEnum Arm64VasInvalid = 0
  fromEnum Arm64Vas8b = 1
  fromEnum Arm64Vas16b = 2
  fromEnum Arm64Vas4h = 3
  fromEnum Arm64Vas8h = 4
  fromEnum Arm64Vas2s = 5
  fromEnum Arm64Vas4s = 6
  fromEnum Arm64Vas1d = 7
  fromEnum Arm64Vas2d = 8
  fromEnum Arm64Vas1q = 9

  toEnum 0 = Arm64VasInvalid
  toEnum 1 = Arm64Vas8b
  toEnum 2 = Arm64Vas16b
  toEnum 3 = Arm64Vas4h
  toEnum 4 = Arm64Vas8h
  toEnum 5 = Arm64Vas2s
  toEnum 6 = Arm64Vas4s
  toEnum 7 = Arm64Vas1d
  toEnum 8 = Arm64Vas2d
  toEnum 9 = Arm64Vas1q
  toEnum unmatched = error ("Arm64Vas.toEnum: Cannot match " ++ show unmatched)

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

-- | vector element size specifier
data Arm64Vess = Arm64VessInvalid
               | Arm64VessB
               | Arm64VessH
               | Arm64VessS
               | Arm64VessD
  deriving (Show,Eq,Bounded)
instance Enum Arm64Vess where
  succ Arm64VessInvalid = Arm64VessB
  succ Arm64VessB = Arm64VessH
  succ Arm64VessH = Arm64VessS
  succ Arm64VessS = Arm64VessD
  succ Arm64VessD = error "Arm64Vess.succ: Arm64VessD has no successor"

  pred Arm64VessB = Arm64VessInvalid
  pred Arm64VessH = Arm64VessB
  pred Arm64VessS = Arm64VessH
  pred Arm64VessD = Arm64VessS
  pred Arm64VessInvalid = error "Arm64Vess.pred: Arm64VessInvalid 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 Arm64VessD

  fromEnum Arm64VessInvalid = 0
  fromEnum Arm64VessB = 1
  fromEnum Arm64VessH = 2
  fromEnum Arm64VessS = 3
  fromEnum Arm64VessD = 4

  toEnum 0 = Arm64VessInvalid
  toEnum 1 = Arm64VessB
  toEnum 2 = Arm64VessH
  toEnum 3 = Arm64VessS
  toEnum 4 = Arm64VessD
  toEnum unmatched = error ("Arm64Vess.toEnum: Cannot match " ++ show unmatched)

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


-- | memory barrier operands
data Arm64BarrierOp = Arm64BarrierInvalid
                    | Arm64BarrierOshld
                    | Arm64BarrierOshst
                    | Arm64BarrierOsh
                    | Arm64BarrierNshld
                    | Arm64BarrierNshst
                    | Arm64BarrierNsh
                    | Arm64BarrierIshld
                    | Arm64BarrierIshst
                    | Arm64BarrierIsh
                    | Arm64BarrierLd
                    | Arm64BarrierSt
                    | Arm64BarrierSy
  deriving (Show,Eq,Bounded)
instance Enum Arm64BarrierOp where
  succ Arm64BarrierInvalid = Arm64BarrierOshld
  succ Arm64BarrierOshld = Arm64BarrierOshst
  succ Arm64BarrierOshst = Arm64BarrierOsh
  succ Arm64BarrierOsh = Arm64BarrierNshld
  succ Arm64BarrierNshld = Arm64BarrierNshst
  succ Arm64BarrierNshst = Arm64BarrierNsh
  succ Arm64BarrierNsh = Arm64BarrierIshld
  succ Arm64BarrierIshld = Arm64BarrierIshst
  succ Arm64BarrierIshst = Arm64BarrierIsh
  succ Arm64BarrierIsh = Arm64BarrierLd
  succ Arm64BarrierLd = Arm64BarrierSt
  succ Arm64BarrierSt = Arm64BarrierSy
  succ Arm64BarrierSy = error "Arm64BarrierOp.succ: Arm64BarrierSy has no successor"

  pred Arm64BarrierOshld = Arm64BarrierInvalid
  pred Arm64BarrierOshst = Arm64BarrierOshld
  pred Arm64BarrierOsh = Arm64BarrierOshst
  pred Arm64BarrierNshld = Arm64BarrierOsh
  pred Arm64BarrierNshst = Arm64BarrierNshld
  pred Arm64BarrierNsh = Arm64BarrierNshst
  pred Arm64BarrierIshld = Arm64BarrierNsh
  pred Arm64BarrierIshst = Arm64BarrierIshld
  pred Arm64BarrierIsh = Arm64BarrierIshst
  pred Arm64BarrierLd = Arm64BarrierIsh
  pred Arm64BarrierSt = Arm64BarrierLd
  pred Arm64BarrierSy = Arm64BarrierSt
  pred Arm64BarrierInvalid = error "Arm64BarrierOp.pred: Arm64BarrierInvalid 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 Arm64BarrierSy

  fromEnum Arm64BarrierInvalid = 0
  fromEnum Arm64BarrierOshld = 1
  fromEnum Arm64BarrierOshst = 2
  fromEnum Arm64BarrierOsh = 3
  fromEnum Arm64BarrierNshld = 5
  fromEnum Arm64BarrierNshst = 6
  fromEnum Arm64BarrierNsh = 7
  fromEnum Arm64BarrierIshld = 9
  fromEnum Arm64BarrierIshst = 10
  fromEnum Arm64BarrierIsh = 11
  fromEnum Arm64BarrierLd = 13
  fromEnum Arm64BarrierSt = 14
  fromEnum Arm64BarrierSy = 15

  toEnum 0 = Arm64BarrierInvalid
  toEnum 1 = Arm64BarrierOshld
  toEnum 2 = Arm64BarrierOshst
  toEnum 3 = Arm64BarrierOsh
  toEnum 5 = Arm64BarrierNshld
  toEnum 6 = Arm64BarrierNshst
  toEnum 7 = Arm64BarrierNsh
  toEnum 9 = Arm64BarrierIshld
  toEnum 10 = Arm64BarrierIshst
  toEnum 11 = Arm64BarrierIsh
  toEnum 13 = Arm64BarrierLd
  toEnum 14 = Arm64BarrierSt
  toEnum 15 = Arm64BarrierSy
  toEnum unmatched = error ("Arm64BarrierOp.toEnum: Cannot match " ++ show unmatched)

{-# LINE 62 "src/Hapstone/Internal/Arm64.chs" #-}


-- | operand type for instruction's operands
data Arm64OpType = Arm64OpInvalid
                 | Arm64OpReg
                 | Arm64OpImm
                 | Arm64OpMem
                 | Arm64OpFp
                 | Arm64OpCimm
                 | Arm64OpRegMrs
                 | Arm64OpRegMsr
                 | Arm64OpPstate
                 | Arm64OpSys
                 | Arm64OpPrefetch
                 | Arm64OpBarrier
  deriving (Show,Eq,Bounded)
instance Enum Arm64OpType where
  succ Arm64OpInvalid = Arm64OpReg
  succ Arm64OpReg = Arm64OpImm
  succ Arm64OpImm = Arm64OpMem
  succ Arm64OpMem = Arm64OpFp
  succ Arm64OpFp = Arm64OpCimm
  succ Arm64OpCimm = Arm64OpRegMrs
  succ Arm64OpRegMrs = Arm64OpRegMsr
  succ Arm64OpRegMsr = Arm64OpPstate
  succ Arm64OpPstate = Arm64OpSys
  succ Arm64OpSys = Arm64OpPrefetch
  succ Arm64OpPrefetch = Arm64OpBarrier
  succ Arm64OpBarrier = error "Arm64OpType.succ: Arm64OpBarrier has no successor"

  pred Arm64OpReg = Arm64OpInvalid
  pred Arm64OpImm = Arm64OpReg
  pred Arm64OpMem = Arm64OpImm
  pred Arm64OpFp = Arm64OpMem
  pred Arm64OpCimm = Arm64OpFp
  pred Arm64OpRegMrs = Arm64OpCimm
  pred Arm64OpRegMsr = Arm64OpRegMrs
  pred Arm64OpPstate = Arm64OpRegMsr
  pred Arm64OpSys = Arm64OpPstate
  pred Arm64OpPrefetch = Arm64OpSys
  pred Arm64OpBarrier = Arm64OpPrefetch
  pred Arm64OpInvalid = error "Arm64OpType.pred: Arm64OpInvalid 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 Arm64OpBarrier

  fromEnum Arm64OpInvalid = 0
  fromEnum Arm64OpReg = 1
  fromEnum Arm64OpImm = 2
  fromEnum Arm64OpMem = 3
  fromEnum Arm64OpFp = 4
  fromEnum Arm64OpCimm = 64
  fromEnum Arm64OpRegMrs = 65
  fromEnum Arm64OpRegMsr = 66
  fromEnum Arm64OpPstate = 67
  fromEnum Arm64OpSys = 68
  fromEnum Arm64OpPrefetch = 69
  fromEnum Arm64OpBarrier = 70

  toEnum 0 = Arm64OpInvalid
  toEnum 1 = Arm64OpReg
  toEnum 2 = Arm64OpImm
  toEnum 3 = Arm64OpMem
  toEnum 4 = Arm64OpFp
  toEnum 64 = Arm64OpCimm
  toEnum 65 = Arm64OpRegMrs
  toEnum 66 = Arm64OpRegMsr
  toEnum 67 = Arm64OpPstate
  toEnum 68 = Arm64OpSys
  toEnum 69 = Arm64OpPrefetch
  toEnum 70 = Arm64OpBarrier
  toEnum unmatched = error ("Arm64OpType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 66 "src/Hapstone/Internal/Arm64.chs" #-}

-- | TLBI operations
data Arm64TlbiOp = Arm64TlbiInvalid
                 | Arm64TlbiVmalle1is
                 | Arm64TlbiVae1is
                 | Arm64TlbiAside1is
                 | Arm64TlbiVaae1is
                 | Arm64TlbiVale1is
                 | Arm64TlbiVaale1is
                 | Arm64TlbiAlle2is
                 | Arm64TlbiVae2is
                 | Arm64TlbiAlle1is
                 | Arm64TlbiVale2is
                 | Arm64TlbiVmalls12e1is
                 | Arm64TlbiAlle3is
                 | Arm64TlbiVae3is
                 | Arm64TlbiVale3is
                 | Arm64TlbiIpas2e1is
                 | Arm64TlbiIpas2le1is
                 | Arm64TlbiIpas2e1
                 | Arm64TlbiIpas2le1
                 | Arm64TlbiVmalle1
                 | Arm64TlbiVae1
                 | Arm64TlbiAside1
                 | Arm64TlbiVaae1
                 | Arm64TlbiVale1
                 | Arm64TlbiVaale1
                 | Arm64TlbiAlle2
                 | Arm64TlbiVae2
                 | Arm64TlbiAlle1
                 | Arm64TlbiVale2
                 | Arm64TlbiVmalls12e1
                 | Arm64TlbiAlle3
                 | Arm64TlbiVae3
                 | Arm64TlbiVale3
  deriving (Show,Eq,Bounded)
instance Enum Arm64TlbiOp where
  succ Arm64TlbiInvalid = Arm64TlbiVmalle1is
  succ Arm64TlbiVmalle1is = Arm64TlbiVae1is
  succ Arm64TlbiVae1is = Arm64TlbiAside1is
  succ Arm64TlbiAside1is = Arm64TlbiVaae1is
  succ Arm64TlbiVaae1is = Arm64TlbiVale1is
  succ Arm64TlbiVale1is = Arm64TlbiVaale1is
  succ Arm64TlbiVaale1is = Arm64TlbiAlle2is
  succ Arm64TlbiAlle2is = Arm64TlbiVae2is
  succ Arm64TlbiVae2is = Arm64TlbiAlle1is
  succ Arm64TlbiAlle1is = Arm64TlbiVale2is
  succ Arm64TlbiVale2is = Arm64TlbiVmalls12e1is
  succ Arm64TlbiVmalls12e1is = Arm64TlbiAlle3is
  succ Arm64TlbiAlle3is = Arm64TlbiVae3is
  succ Arm64TlbiVae3is = Arm64TlbiVale3is
  succ Arm64TlbiVale3is = Arm64TlbiIpas2e1is
  succ Arm64TlbiIpas2e1is = Arm64TlbiIpas2le1is
  succ Arm64TlbiIpas2le1is = Arm64TlbiIpas2e1
  succ Arm64TlbiIpas2e1 = Arm64TlbiIpas2le1
  succ Arm64TlbiIpas2le1 = Arm64TlbiVmalle1
  succ Arm64TlbiVmalle1 = Arm64TlbiVae1
  succ Arm64TlbiVae1 = Arm64TlbiAside1
  succ Arm64TlbiAside1 = Arm64TlbiVaae1
  succ Arm64TlbiVaae1 = Arm64TlbiVale1
  succ Arm64TlbiVale1 = Arm64TlbiVaale1
  succ Arm64TlbiVaale1 = Arm64TlbiAlle2
  succ Arm64TlbiAlle2 = Arm64TlbiVae2
  succ Arm64TlbiVae2 = Arm64TlbiAlle1
  succ Arm64TlbiAlle1 = Arm64TlbiVale2
  succ Arm64TlbiVale2 = Arm64TlbiVmalls12e1
  succ Arm64TlbiVmalls12e1 = Arm64TlbiAlle3
  succ Arm64TlbiAlle3 = Arm64TlbiVae3
  succ Arm64TlbiVae3 = Arm64TlbiVale3
  succ Arm64TlbiVale3 = error "Arm64TlbiOp.succ: Arm64TlbiVale3 has no successor"

  pred Arm64TlbiVmalle1is = Arm64TlbiInvalid
  pred Arm64TlbiVae1is = Arm64TlbiVmalle1is
  pred Arm64TlbiAside1is = Arm64TlbiVae1is
  pred Arm64TlbiVaae1is = Arm64TlbiAside1is
  pred Arm64TlbiVale1is = Arm64TlbiVaae1is
  pred Arm64TlbiVaale1is = Arm64TlbiVale1is
  pred Arm64TlbiAlle2is = Arm64TlbiVaale1is
  pred Arm64TlbiVae2is = Arm64TlbiAlle2is
  pred Arm64TlbiAlle1is = Arm64TlbiVae2is
  pred Arm64TlbiVale2is = Arm64TlbiAlle1is
  pred Arm64TlbiVmalls12e1is = Arm64TlbiVale2is
  pred Arm64TlbiAlle3is = Arm64TlbiVmalls12e1is
  pred Arm64TlbiVae3is = Arm64TlbiAlle3is
  pred Arm64TlbiVale3is = Arm64TlbiVae3is
  pred Arm64TlbiIpas2e1is = Arm64TlbiVale3is
  pred Arm64TlbiIpas2le1is = Arm64TlbiIpas2e1is
  pred Arm64TlbiIpas2e1 = Arm64TlbiIpas2le1is
  pred Arm64TlbiIpas2le1 = Arm64TlbiIpas2e1
  pred Arm64TlbiVmalle1 = Arm64TlbiIpas2le1
  pred Arm64TlbiVae1 = Arm64TlbiVmalle1
  pred Arm64TlbiAside1 = Arm64TlbiVae1
  pred Arm64TlbiVaae1 = Arm64TlbiAside1
  pred Arm64TlbiVale1 = Arm64TlbiVaae1
  pred Arm64TlbiVaale1 = Arm64TlbiVale1
  pred Arm64TlbiAlle2 = Arm64TlbiVaale1
  pred Arm64TlbiVae2 = Arm64TlbiAlle2
  pred Arm64TlbiAlle1 = Arm64TlbiVae2
  pred Arm64TlbiVale2 = Arm64TlbiAlle1
  pred Arm64TlbiVmalls12e1 = Arm64TlbiVale2
  pred Arm64TlbiAlle3 = Arm64TlbiVmalls12e1
  pred Arm64TlbiVae3 = Arm64TlbiAlle3
  pred Arm64TlbiVale3 = Arm64TlbiVae3
  pred Arm64TlbiInvalid = error "Arm64TlbiOp.pred: Arm64TlbiInvalid 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 Arm64TlbiVale3

  fromEnum Arm64TlbiInvalid = 0
  fromEnum Arm64TlbiVmalle1is = 1
  fromEnum Arm64TlbiVae1is = 2
  fromEnum Arm64TlbiAside1is = 3
  fromEnum Arm64TlbiVaae1is = 4
  fromEnum Arm64TlbiVale1is = 5
  fromEnum Arm64TlbiVaale1is = 6
  fromEnum Arm64TlbiAlle2is = 7
  fromEnum Arm64TlbiVae2is = 8
  fromEnum Arm64TlbiAlle1is = 9
  fromEnum Arm64TlbiVale2is = 10
  fromEnum Arm64TlbiVmalls12e1is = 11
  fromEnum Arm64TlbiAlle3is = 12
  fromEnum Arm64TlbiVae3is = 13
  fromEnum Arm64TlbiVale3is = 14
  fromEnum Arm64TlbiIpas2e1is = 15
  fromEnum Arm64TlbiIpas2le1is = 16
  fromEnum Arm64TlbiIpas2e1 = 17
  fromEnum Arm64TlbiIpas2le1 = 18
  fromEnum Arm64TlbiVmalle1 = 19
  fromEnum Arm64TlbiVae1 = 20
  fromEnum Arm64TlbiAside1 = 21
  fromEnum Arm64TlbiVaae1 = 22
  fromEnum Arm64TlbiVale1 = 23
  fromEnum Arm64TlbiVaale1 = 24
  fromEnum Arm64TlbiAlle2 = 25
  fromEnum Arm64TlbiVae2 = 26
  fromEnum Arm64TlbiAlle1 = 27
  fromEnum Arm64TlbiVale2 = 28
  fromEnum Arm64TlbiVmalls12e1 = 29
  fromEnum Arm64TlbiAlle3 = 30
  fromEnum Arm64TlbiVae3 = 31
  fromEnum Arm64TlbiVale3 = 32

  toEnum 0 = Arm64TlbiInvalid
  toEnum 1 = Arm64TlbiVmalle1is
  toEnum 2 = Arm64TlbiVae1is
  toEnum 3 = Arm64TlbiAside1is
  toEnum 4 = Arm64TlbiVaae1is
  toEnum 5 = Arm64TlbiVale1is
  toEnum 6 = Arm64TlbiVaale1is
  toEnum 7 = Arm64TlbiAlle2is
  toEnum 8 = Arm64TlbiVae2is
  toEnum 9 = Arm64TlbiAlle1is
  toEnum 10 = Arm64TlbiVale2is
  toEnum 11 = Arm64TlbiVmalls12e1is
  toEnum 12 = Arm64TlbiAlle3is
  toEnum 13 = Arm64TlbiVae3is
  toEnum 14 = Arm64TlbiVale3is
  toEnum 15 = Arm64TlbiIpas2e1is
  toEnum 16 = Arm64TlbiIpas2le1is
  toEnum 17 = Arm64TlbiIpas2e1
  toEnum 18 = Arm64TlbiIpas2le1
  toEnum 19 = Arm64TlbiVmalle1
  toEnum 20 = Arm64TlbiVae1
  toEnum 21 = Arm64TlbiAside1
  toEnum 22 = Arm64TlbiVaae1
  toEnum 23 = Arm64TlbiVale1
  toEnum 24 = Arm64TlbiVaale1
  toEnum 25 = Arm64TlbiAlle2
  toEnum 26 = Arm64TlbiVae2
  toEnum 27 = Arm64TlbiAlle1
  toEnum 28 = Arm64TlbiVale2
  toEnum 29 = Arm64TlbiVmalls12e1
  toEnum 30 = Arm64TlbiAlle3
  toEnum 31 = Arm64TlbiVae3
  toEnum 32 = Arm64TlbiVale3
  toEnum unmatched = error ("Arm64TlbiOp.toEnum: Cannot match " ++ show unmatched)

{-# LINE 69 "src/Hapstone/Internal/Arm64.chs" #-}

-- | AT operations
data Arm64AtOp = Arm64AtS1e1r
               | Arm64AtS1e1w
               | Arm64AtS1e0r
               | Arm64AtS1e0w
               | Arm64AtS1e2r
               | Arm64AtS1e2w
               | Arm64AtS12e1r
               | Arm64AtS12e1w
               | Arm64AtS12e0r
               | Arm64AtS12e0w
               | Arm64AtS1e3r
               | Arm64AtS1e3w
  deriving (Enum,Show,Eq,Bounded)

{-# LINE 72 "src/Hapstone/Internal/Arm64.chs" #-}

-- | DC operations
data Arm64DcOp = Arm64DcInvalid
               | Arm64DcZva
               | Arm64DcIvac
               | Arm64DcIsw
               | Arm64DcCvac
               | Arm64DcCsw
               | Arm64DcCvau
               | Arm64DcCivac
               | Arm64DcCisw
  deriving (Show,Eq,Bounded)
instance Enum Arm64DcOp where
  succ Arm64DcInvalid = Arm64DcZva
  succ Arm64DcZva = Arm64DcIvac
  succ Arm64DcIvac = Arm64DcIsw
  succ Arm64DcIsw = Arm64DcCvac
  succ Arm64DcCvac = Arm64DcCsw
  succ Arm64DcCsw = Arm64DcCvau
  succ Arm64DcCvau = Arm64DcCivac
  succ Arm64DcCivac = Arm64DcCisw
  succ Arm64DcCisw = error "Arm64DcOp.succ: Arm64DcCisw has no successor"

  pred Arm64DcZva = Arm64DcInvalid
  pred Arm64DcIvac = Arm64DcZva
  pred Arm64DcIsw = Arm64DcIvac
  pred Arm64DcCvac = Arm64DcIsw
  pred Arm64DcCsw = Arm64DcCvac
  pred Arm64DcCvau = Arm64DcCsw
  pred Arm64DcCivac = Arm64DcCvau
  pred Arm64DcCisw = Arm64DcCivac
  pred Arm64DcInvalid = error "Arm64DcOp.pred: Arm64DcInvalid 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 Arm64DcCisw

  fromEnum Arm64DcInvalid = 0
  fromEnum Arm64DcZva = 1
  fromEnum Arm64DcIvac = 2
  fromEnum Arm64DcIsw = 3
  fromEnum Arm64DcCvac = 4
  fromEnum Arm64DcCsw = 5
  fromEnum Arm64DcCvau = 6
  fromEnum Arm64DcCivac = 7
  fromEnum Arm64DcCisw = 8

  toEnum 0 = Arm64DcInvalid
  toEnum 1 = Arm64DcZva
  toEnum 2 = Arm64DcIvac
  toEnum 3 = Arm64DcIsw
  toEnum 4 = Arm64DcCvac
  toEnum 5 = Arm64DcCsw
  toEnum 6 = Arm64DcCvau
  toEnum 7 = Arm64DcCivac
  toEnum 8 = Arm64DcCisw
  toEnum unmatched = error ("Arm64DcOp.toEnum: Cannot match " ++ show unmatched)

{-# LINE 75 "src/Hapstone/Internal/Arm64.chs" #-}

-- | IC operations
data Arm64IcOp = Arm64IcInvalid
               | Arm64IcIalluis
               | Arm64IcIallu
               | Arm64IcIvau
  deriving (Show,Eq,Bounded)
instance Enum Arm64IcOp where
  succ Arm64IcInvalid = Arm64IcIalluis
  succ Arm64IcIalluis = Arm64IcIallu
  succ Arm64IcIallu = Arm64IcIvau
  succ Arm64IcIvau = error "Arm64IcOp.succ: Arm64IcIvau has no successor"

  pred Arm64IcIalluis = Arm64IcInvalid
  pred Arm64IcIallu = Arm64IcIalluis
  pred Arm64IcIvau = Arm64IcIallu
  pred Arm64IcInvalid = error "Arm64IcOp.pred: Arm64IcInvalid 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 Arm64IcIvau

  fromEnum Arm64IcInvalid = 0
  fromEnum Arm64IcIalluis = 1
  fromEnum Arm64IcIallu = 2
  fromEnum Arm64IcIvau = 3

  toEnum 0 = Arm64IcInvalid
  toEnum 1 = Arm64IcIalluis
  toEnum 2 = Arm64IcIallu
  toEnum 3 = Arm64IcIvau
  toEnum unmatched = error ("Arm64IcOp.toEnum: Cannot match " ++ show unmatched)

{-# LINE 78 "src/Hapstone/Internal/Arm64.chs" #-}

-- | prefetch operations (PRFM)
data Arm64PrefetchOp = Arm64PrfmInvalid
                     | Arm64PrfmPldl1keep
                     | Arm64PrfmPldl1strm
                     | Arm64PrfmPldl2keep
                     | Arm64PrfmPldl2strm
                     | Arm64PrfmPldl3keep
                     | Arm64PrfmPldl3strm
                     | Arm64PrfmPlil1keep
                     | Arm64PrfmPlil1strm
                     | Arm64PrfmPlil2keep
                     | Arm64PrfmPlil2strm
                     | Arm64PrfmPlil3keep
                     | Arm64PrfmPlil3strm
                     | Arm64PrfmPstl1keep
                     | Arm64PrfmPstl1strm
                     | Arm64PrfmPstl2keep
                     | Arm64PrfmPstl2strm
                     | Arm64PrfmPstl3keep
                     | Arm64PrfmPstl3strm
  deriving (Show,Eq,Bounded)
instance Enum Arm64PrefetchOp where
  succ Arm64PrfmInvalid = Arm64PrfmPldl1keep
  succ Arm64PrfmPldl1keep = Arm64PrfmPldl1strm
  succ Arm64PrfmPldl1strm = Arm64PrfmPldl2keep
  succ Arm64PrfmPldl2keep = Arm64PrfmPldl2strm
  succ Arm64PrfmPldl2strm = Arm64PrfmPldl3keep
  succ Arm64PrfmPldl3keep = Arm64PrfmPldl3strm
  succ Arm64PrfmPldl3strm = Arm64PrfmPlil1keep
  succ Arm64PrfmPlil1keep = Arm64PrfmPlil1strm
  succ Arm64PrfmPlil1strm = Arm64PrfmPlil2keep
  succ Arm64PrfmPlil2keep = Arm64PrfmPlil2strm
  succ Arm64PrfmPlil2strm = Arm64PrfmPlil3keep
  succ Arm64PrfmPlil3keep = Arm64PrfmPlil3strm
  succ Arm64PrfmPlil3strm = Arm64PrfmPstl1keep
  succ Arm64PrfmPstl1keep = Arm64PrfmPstl1strm
  succ Arm64PrfmPstl1strm = Arm64PrfmPstl2keep
  succ Arm64PrfmPstl2keep = Arm64PrfmPstl2strm
  succ Arm64PrfmPstl2strm = Arm64PrfmPstl3keep
  succ Arm64PrfmPstl3keep = Arm64PrfmPstl3strm
  succ Arm64PrfmPstl3strm = error "Arm64PrefetchOp.succ: Arm64PrfmPstl3strm has no successor"

  pred Arm64PrfmPldl1keep = Arm64PrfmInvalid
  pred Arm64PrfmPldl1strm = Arm64PrfmPldl1keep
  pred Arm64PrfmPldl2keep = Arm64PrfmPldl1strm
  pred Arm64PrfmPldl2strm = Arm64PrfmPldl2keep
  pred Arm64PrfmPldl3keep = Arm64PrfmPldl2strm
  pred Arm64PrfmPldl3strm = Arm64PrfmPldl3keep
  pred Arm64PrfmPlil1keep = Arm64PrfmPldl3strm
  pred Arm64PrfmPlil1strm = Arm64PrfmPlil1keep
  pred Arm64PrfmPlil2keep = Arm64PrfmPlil1strm
  pred Arm64PrfmPlil2strm = Arm64PrfmPlil2keep
  pred Arm64PrfmPlil3keep = Arm64PrfmPlil2strm
  pred Arm64PrfmPlil3strm = Arm64PrfmPlil3keep
  pred Arm64PrfmPstl1keep = Arm64PrfmPlil3strm
  pred Arm64PrfmPstl1strm = Arm64PrfmPstl1keep
  pred Arm64PrfmPstl2keep = Arm64PrfmPstl1strm
  pred Arm64PrfmPstl2strm = Arm64PrfmPstl2keep
  pred Arm64PrfmPstl3keep = Arm64PrfmPstl2strm
  pred Arm64PrfmPstl3strm = Arm64PrfmPstl3keep
  pred Arm64PrfmInvalid = error "Arm64PrefetchOp.pred: Arm64PrfmInvalid 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 Arm64PrfmPstl3strm

  fromEnum Arm64PrfmInvalid = 0
  fromEnum Arm64PrfmPldl1keep = 1
  fromEnum Arm64PrfmPldl1strm = 2
  fromEnum Arm64PrfmPldl2keep = 3
  fromEnum Arm64PrfmPldl2strm = 4
  fromEnum Arm64PrfmPldl3keep = 5
  fromEnum Arm64PrfmPldl3strm = 6
  fromEnum Arm64PrfmPlil1keep = 9
  fromEnum Arm64PrfmPlil1strm = 10
  fromEnum Arm64PrfmPlil2keep = 11
  fromEnum Arm64PrfmPlil2strm = 12
  fromEnum Arm64PrfmPlil3keep = 13
  fromEnum Arm64PrfmPlil3strm = 14
  fromEnum Arm64PrfmPstl1keep = 17
  fromEnum Arm64PrfmPstl1strm = 18
  fromEnum Arm64PrfmPstl2keep = 19
  fromEnum Arm64PrfmPstl2strm = 20
  fromEnum Arm64PrfmPstl3keep = 21
  fromEnum Arm64PrfmPstl3strm = 22

  toEnum 0 = Arm64PrfmInvalid
  toEnum 1 = Arm64PrfmPldl1keep
  toEnum 2 = Arm64PrfmPldl1strm
  toEnum 3 = Arm64PrfmPldl2keep
  toEnum 4 = Arm64PrfmPldl2strm
  toEnum 5 = Arm64PrfmPldl3keep
  toEnum 6 = Arm64PrfmPldl3strm
  toEnum 9 = Arm64PrfmPlil1keep
  toEnum 10 = Arm64PrfmPlil1strm
  toEnum 11 = Arm64PrfmPlil2keep
  toEnum 12 = Arm64PrfmPlil2strm
  toEnum 13 = Arm64PrfmPlil3keep
  toEnum 14 = Arm64PrfmPlil3strm
  toEnum 17 = Arm64PrfmPstl1keep
  toEnum 18 = Arm64PrfmPstl1strm
  toEnum 19 = Arm64PrfmPstl2keep
  toEnum 20 = Arm64PrfmPstl2strm
  toEnum 21 = Arm64PrfmPstl3keep
  toEnum 22 = Arm64PrfmPstl3strm
  toEnum unmatched = error ("Arm64PrefetchOp.toEnum: Cannot match " ++ show unmatched)

{-# LINE 81 "src/Hapstone/Internal/Arm64.chs" #-}


-- | ARM64 registers
data Arm64Reg = Arm64RegInvalid
              | Arm64RegX29
              | Arm64RegFp
              | Arm64RegX30
              | Arm64RegLr
              | Arm64RegNzcv
              | Arm64RegSp
              | Arm64RegWsp
              | Arm64RegWzr
              | Arm64RegXzr
              | Arm64RegB0
              | Arm64RegB1
              | Arm64RegB2
              | Arm64RegB3
              | Arm64RegB4
              | Arm64RegB5
              | Arm64RegB6
              | Arm64RegB7
              | Arm64RegB8
              | Arm64RegB9
              | Arm64RegB10
              | Arm64RegB11
              | Arm64RegB12
              | Arm64RegB13
              | Arm64RegB14
              | Arm64RegB15
              | Arm64RegB16
              | Arm64RegB17
              | Arm64RegB18
              | Arm64RegB19
              | Arm64RegB20
              | Arm64RegB21
              | Arm64RegB22
              | Arm64RegB23
              | Arm64RegB24
              | Arm64RegB25
              | Arm64RegB26
              | Arm64RegB27
              | Arm64RegB28
              | Arm64RegB29
              | Arm64RegB30
              | Arm64RegB31
              | Arm64RegD0
              | Arm64RegD1
              | Arm64RegD2
              | Arm64RegD3
              | Arm64RegD4
              | Arm64RegD5
              | Arm64RegD6
              | Arm64RegD7
              | Arm64RegD8
              | Arm64RegD9
              | Arm64RegD10
              | Arm64RegD11
              | Arm64RegD12
              | Arm64RegD13
              | Arm64RegD14
              | Arm64RegD15
              | Arm64RegD16
              | Arm64RegD17
              | Arm64RegD18
              | Arm64RegD19
              | Arm64RegD20
              | Arm64RegD21
              | Arm64RegD22
              | Arm64RegD23
              | Arm64RegD24
              | Arm64RegD25
              | Arm64RegD26
              | Arm64RegD27
              | Arm64RegD28
              | Arm64RegD29
              | Arm64RegD30
              | Arm64RegD31
              | Arm64RegH0
              | Arm64RegH1
              | Arm64RegH2
              | Arm64RegH3
              | Arm64RegH4
              | Arm64RegH5
              | Arm64RegH6
              | Arm64RegH7
              | Arm64RegH8
              | Arm64RegH9
              | Arm64RegH10
              | Arm64RegH11
              | Arm64RegH12
              | Arm64RegH13
              | Arm64RegH14
              | Arm64RegH15
              | Arm64RegH16
              | Arm64RegH17
              | Arm64RegH18
              | Arm64RegH19
              | Arm64RegH20
              | Arm64RegH21
              | Arm64RegH22
              | Arm64RegH23
              | Arm64RegH24
              | Arm64RegH25
              | Arm64RegH26
              | Arm64RegH27
              | Arm64RegH28
              | Arm64RegH29
              | Arm64RegH30
              | Arm64RegH31
              | Arm64RegQ0
              | Arm64RegQ1
              | Arm64RegQ2
              | Arm64RegQ3
              | Arm64RegQ4
              | Arm64RegQ5
              | Arm64RegQ6
              | Arm64RegQ7
              | Arm64RegQ8
              | Arm64RegQ9
              | Arm64RegQ10
              | Arm64RegQ11
              | Arm64RegQ12
              | Arm64RegQ13
              | Arm64RegQ14
              | Arm64RegQ15
              | Arm64RegQ16
              | Arm64RegQ17
              | Arm64RegQ18
              | Arm64RegQ19
              | Arm64RegQ20
              | Arm64RegQ21
              | Arm64RegQ22
              | Arm64RegQ23
              | Arm64RegQ24
              | Arm64RegQ25
              | Arm64RegQ26
              | Arm64RegQ27
              | Arm64RegQ28
              | Arm64RegQ29
              | Arm64RegQ30
              | Arm64RegQ31
              | Arm64RegS0
              | Arm64RegS1
              | Arm64RegS2
              | Arm64RegS3
              | Arm64RegS4
              | Arm64RegS5
              | Arm64RegS6
              | Arm64RegS7
              | Arm64RegS8
              | Arm64RegS9
              | Arm64RegS10
              | Arm64RegS11
              | Arm64RegS12
              | Arm64RegS13
              | Arm64RegS14
              | Arm64RegS15
              | Arm64RegS16
              | Arm64RegS17
              | Arm64RegS18
              | Arm64RegS19
              | Arm64RegS20
              | Arm64RegS21
              | Arm64RegS22
              | Arm64RegS23
              | Arm64RegS24
              | Arm64RegS25
              | Arm64RegS26
              | Arm64RegS27
              | Arm64RegS28
              | Arm64RegS29
              | Arm64RegS30
              | Arm64RegS31
              | Arm64RegW0
              | Arm64RegW1
              | Arm64RegW2
              | Arm64RegW3
              | Arm64RegW4
              | Arm64RegW5
              | Arm64RegW6
              | Arm64RegW7
              | Arm64RegW8
              | Arm64RegW9
              | Arm64RegW10
              | Arm64RegW11
              | Arm64RegW12
              | Arm64RegW13
              | Arm64RegW14
              | Arm64RegW15
              | Arm64RegW16
              | Arm64RegW17
              | Arm64RegW18
              | Arm64RegW19
              | Arm64RegW20
              | Arm64RegW21
              | Arm64RegW22
              | Arm64RegW23
              | Arm64RegW24
              | Arm64RegW25
              | Arm64RegW26
              | Arm64RegW27
              | Arm64RegW28
              | Arm64RegW29
              | Arm64RegW30
              | Arm64RegX0
              | Arm64RegX1
              | Arm64RegX2
              | Arm64RegX3
              | Arm64RegX4
              | Arm64RegX5
              | Arm64RegX6
              | Arm64RegX7
              | Arm64RegX8
              | Arm64RegX9
              | Arm64RegX10
              | Arm64RegX11
              | Arm64RegX12
              | Arm64RegX13
              | Arm64RegX14
              | Arm64RegX15
              | Arm64RegX16
              | Arm64RegIp1
              | Arm64RegX17
              | Arm64RegIp0
              | Arm64RegX18
              | Arm64RegX19
              | Arm64RegX20
              | Arm64RegX21
              | Arm64RegX22
              | Arm64RegX23
              | Arm64RegX24
              | Arm64RegX25
              | Arm64RegX26
              | Arm64RegX27
              | Arm64RegX28
              | Arm64RegV0
              | Arm64RegV1
              | Arm64RegV2
              | Arm64RegV3
              | Arm64RegV4
              | Arm64RegV5
              | Arm64RegV6
              | Arm64RegV7
              | Arm64RegV8
              | Arm64RegV9
              | Arm64RegV10
              | Arm64RegV11
              | Arm64RegV12
              | Arm64RegV13
              | Arm64RegV14
              | Arm64RegV15
              | Arm64RegV16
              | Arm64RegV17
              | Arm64RegV18
              | Arm64RegV19
              | Arm64RegV20
              | Arm64RegV21
              | Arm64RegV22
              | Arm64RegV23
              | Arm64RegV24
              | Arm64RegV25
              | Arm64RegV26
              | Arm64RegV27
              | Arm64RegV28
              | Arm64RegV29
              | Arm64RegV30
              | Arm64RegV31
              | Arm64RegEnding
  deriving (Show,Eq,Bounded)
instance Enum Arm64Reg where
  succ Arm64RegInvalid = Arm64RegX29
  succ Arm64RegX29 = Arm64RegX30
  succ Arm64RegFp = Arm64RegX30
  succ Arm64RegX30 = Arm64RegNzcv
  succ Arm64RegLr = Arm64RegNzcv
  succ Arm64RegNzcv = Arm64RegSp
  succ Arm64RegSp = Arm64RegWsp
  succ Arm64RegWsp = Arm64RegWzr
  succ Arm64RegWzr = Arm64RegXzr
  succ Arm64RegXzr = Arm64RegB0
  succ Arm64RegB0 = Arm64RegB1
  succ Arm64RegB1 = Arm64RegB2
  succ Arm64RegB2 = Arm64RegB3
  succ Arm64RegB3 = Arm64RegB4
  succ Arm64RegB4 = Arm64RegB5
  succ Arm64RegB5 = Arm64RegB6
  succ Arm64RegB6 = Arm64RegB7
  succ Arm64RegB7 = Arm64RegB8
  succ Arm64RegB8 = Arm64RegB9
  succ Arm64RegB9 = Arm64RegB10
  succ Arm64RegB10 = Arm64RegB11
  succ Arm64RegB11 = Arm64RegB12
  succ Arm64RegB12 = Arm64RegB13
  succ Arm64RegB13 = Arm64RegB14
  succ Arm64RegB14 = Arm64RegB15
  succ Arm64RegB15 = Arm64RegB16
  succ Arm64RegB16 = Arm64RegB17
  succ Arm64RegB17 = Arm64RegB18
  succ Arm64RegB18 = Arm64RegB19
  succ Arm64RegB19 = Arm64RegB20
  succ Arm64RegB20 = Arm64RegB21
  succ Arm64RegB21 = Arm64RegB22
  succ Arm64RegB22 = Arm64RegB23
  succ Arm64RegB23 = Arm64RegB24
  succ Arm64RegB24 = Arm64RegB25
  succ Arm64RegB25 = Arm64RegB26
  succ Arm64RegB26 = Arm64RegB27
  succ Arm64RegB27 = Arm64RegB28
  succ Arm64RegB28 = Arm64RegB29
  succ Arm64RegB29 = Arm64RegB30
  succ Arm64RegB30 = Arm64RegB31
  succ Arm64RegB31 = Arm64RegD0
  succ Arm64RegD0 = Arm64RegD1
  succ Arm64RegD1 = Arm64RegD2
  succ Arm64RegD2 = Arm64RegD3
  succ Arm64RegD3 = Arm64RegD4
  succ Arm64RegD4 = Arm64RegD5
  succ Arm64RegD5 = Arm64RegD6
  succ Arm64RegD6 = Arm64RegD7
  succ Arm64RegD7 = Arm64RegD8
  succ Arm64RegD8 = Arm64RegD9
  succ Arm64RegD9 = Arm64RegD10
  succ Arm64RegD10 = Arm64RegD11
  succ Arm64RegD11 = Arm64RegD12
  succ Arm64RegD12 = Arm64RegD13
  succ Arm64RegD13 = Arm64RegD14
  succ Arm64RegD14 = Arm64RegD15
  succ Arm64RegD15 = Arm64RegD16
  succ Arm64RegD16 = Arm64RegD17
  succ Arm64RegD17 = Arm64RegD18
  succ Arm64RegD18 = Arm64RegD19
  succ Arm64RegD19 = Arm64RegD20
  succ Arm64RegD20 = Arm64RegD21
  succ Arm64RegD21 = Arm64RegD22
  succ Arm64RegD22 = Arm64RegD23
  succ Arm64RegD23 = Arm64RegD24
  succ Arm64RegD24 = Arm64RegD25
  succ Arm64RegD25 = Arm64RegD26
  succ Arm64RegD26 = Arm64RegD27
  succ Arm64RegD27 = Arm64RegD28
  succ Arm64RegD28 = Arm64RegD29
  succ Arm64RegD29 = Arm64RegD30
  succ Arm64RegD30 = Arm64RegD31
  succ Arm64RegD31 = Arm64RegH0
  succ Arm64RegH0 = Arm64RegH1
  succ Arm64RegH1 = Arm64RegH2
  succ Arm64RegH2 = Arm64RegH3
  succ Arm64RegH3 = Arm64RegH4
  succ Arm64RegH4 = Arm64RegH5
  succ Arm64RegH5 = Arm64RegH6
  succ Arm64RegH6 = Arm64RegH7
  succ Arm64RegH7 = Arm64RegH8
  succ Arm64RegH8 = Arm64RegH9
  succ Arm64RegH9 = Arm64RegH10
  succ Arm64RegH10 = Arm64RegH11
  succ Arm64RegH11 = Arm64RegH12
  succ Arm64RegH12 = Arm64RegH13
  succ Arm64RegH13 = Arm64RegH14
  succ Arm64RegH14 = Arm64RegH15
  succ Arm64RegH15 = Arm64RegH16
  succ Arm64RegH16 = Arm64RegH17
  succ Arm64RegH17 = Arm64RegH18
  succ Arm64RegH18 = Arm64RegH19
  succ Arm64RegH19 = Arm64RegH20
  succ Arm64RegH20 = Arm64RegH21
  succ Arm64RegH21 = Arm64RegH22
  succ Arm64RegH22 = Arm64RegH23
  succ Arm64RegH23 = Arm64RegH24
  succ Arm64RegH24 = Arm64RegH25
  succ Arm64RegH25 = Arm64RegH26
  succ Arm64RegH26 = Arm64RegH27
  succ Arm64RegH27 = Arm64RegH28
  succ Arm64RegH28 = Arm64RegH29
  succ Arm64RegH29 = Arm64RegH30
  succ Arm64RegH30 = Arm64RegH31
  succ Arm64RegH31 = Arm64RegQ0
  succ Arm64RegQ0 = Arm64RegQ1
  succ Arm64RegQ1 = Arm64RegQ2
  succ Arm64RegQ2 = Arm64RegQ3
  succ Arm64RegQ3 = Arm64RegQ4
  succ Arm64RegQ4 = Arm64RegQ5
  succ Arm64RegQ5 = Arm64RegQ6
  succ Arm64RegQ6 = Arm64RegQ7
  succ Arm64RegQ7 = Arm64RegQ8
  succ Arm64RegQ8 = Arm64RegQ9
  succ Arm64RegQ9 = Arm64RegQ10
  succ Arm64RegQ10 = Arm64RegQ11
  succ Arm64RegQ11 = Arm64RegQ12
  succ Arm64RegQ12 = Arm64RegQ13
  succ Arm64RegQ13 = Arm64RegQ14
  succ Arm64RegQ14 = Arm64RegQ15
  succ Arm64RegQ15 = Arm64RegQ16
  succ Arm64RegQ16 = Arm64RegQ17
  succ Arm64RegQ17 = Arm64RegQ18
  succ Arm64RegQ18 = Arm64RegQ19
  succ Arm64RegQ19 = Arm64RegQ20
  succ Arm64RegQ20 = Arm64RegQ21
  succ Arm64RegQ21 = Arm64RegQ22
  succ Arm64RegQ22 = Arm64RegQ23
  succ Arm64RegQ23 = Arm64RegQ24
  succ Arm64RegQ24 = Arm64RegQ25
  succ Arm64RegQ25 = Arm64RegQ26
  succ Arm64RegQ26 = Arm64RegQ27
  succ Arm64RegQ27 = Arm64RegQ28
  succ Arm64RegQ28 = Arm64RegQ29
  succ Arm64RegQ29 = Arm64RegQ30
  succ Arm64RegQ30 = Arm64RegQ31
  succ Arm64RegQ31 = Arm64RegS0
  succ Arm64RegS0 = Arm64RegS1
  succ Arm64RegS1 = Arm64RegS2
  succ Arm64RegS2 = Arm64RegS3
  succ Arm64RegS3 = Arm64RegS4
  succ Arm64RegS4 = Arm64RegS5
  succ Arm64RegS5 = Arm64RegS6
  succ Arm64RegS6 = Arm64RegS7
  succ Arm64RegS7 = Arm64RegS8
  succ Arm64RegS8 = Arm64RegS9
  succ Arm64RegS9 = Arm64RegS10
  succ Arm64RegS10 = Arm64RegS11
  succ Arm64RegS11 = Arm64RegS12
  succ Arm64RegS12 = Arm64RegS13
  succ Arm64RegS13 = Arm64RegS14
  succ Arm64RegS14 = Arm64RegS15
  succ Arm64RegS15 = Arm64RegS16
  succ Arm64RegS16 = Arm64RegS17
  succ Arm64RegS17 = Arm64RegS18
  succ Arm64RegS18 = Arm64RegS19
  succ Arm64RegS19 = Arm64RegS20
  succ Arm64RegS20 = Arm64RegS21
  succ Arm64RegS21 = Arm64RegS22
  succ Arm64RegS22 = Arm64RegS23
  succ Arm64RegS23 = Arm64RegS24
  succ Arm64RegS24 = Arm64RegS25
  succ Arm64RegS25 = Arm64RegS26
  succ Arm64RegS26 = Arm64RegS27
  succ Arm64RegS27 = Arm64RegS28
  succ Arm64RegS28 = Arm64RegS29
  succ Arm64RegS29 = Arm64RegS30
  succ Arm64RegS30 = Arm64RegS31
  succ Arm64RegS31 = Arm64RegW0
  succ Arm64RegW0 = Arm64RegW1
  succ Arm64RegW1 = Arm64RegW2
  succ Arm64RegW2 = Arm64RegW3
  succ Arm64RegW3 = Arm64RegW4
  succ Arm64RegW4 = Arm64RegW5
  succ Arm64RegW5 = Arm64RegW6
  succ Arm64RegW6 = Arm64RegW7
  succ Arm64RegW7 = Arm64RegW8
  succ Arm64RegW8 = Arm64RegW9
  succ Arm64RegW9 = Arm64RegW10
  succ Arm64RegW10 = Arm64RegW11
  succ Arm64RegW11 = Arm64RegW12
  succ Arm64RegW12 = Arm64RegW13
  succ Arm64RegW13 = Arm64RegW14
  succ Arm64RegW14 = Arm64RegW15
  succ Arm64RegW15 = Arm64RegW16
  succ Arm64RegW16 = Arm64RegW17
  succ Arm64RegW17 = Arm64RegW18
  succ Arm64RegW18 = Arm64RegW19
  succ Arm64RegW19 = Arm64RegW20
  succ Arm64RegW20 = Arm64RegW21
  succ Arm64RegW21 = Arm64RegW22
  succ Arm64RegW22 = Arm64RegW23
  succ Arm64RegW23 = Arm64RegW24
  succ Arm64RegW24 = Arm64RegW25
  succ Arm64RegW25 = Arm64RegW26
  succ Arm64RegW26 = Arm64RegW27
  succ Arm64RegW27 = Arm64RegW28
  succ Arm64RegW28 = Arm64RegW29
  succ Arm64RegW29 = Arm64RegW30
  succ Arm64RegW30 = Arm64RegX0
  succ Arm64RegX0 = Arm64RegX1
  succ Arm64RegX1 = Arm64RegX2
  succ Arm64RegX2 = Arm64RegX3
  succ Arm64RegX3 = Arm64RegX4
  succ Arm64RegX4 = Arm64RegX5
  succ Arm64RegX5 = Arm64RegX6
  succ Arm64RegX6 = Arm64RegX7
  succ Arm64RegX7 = Arm64RegX8
  succ Arm64RegX8 = Arm64RegX9
  succ Arm64RegX9 = Arm64RegX10
  succ Arm64RegX10 = Arm64RegX11
  succ Arm64RegX11 = Arm64RegX12
  succ Arm64RegX12 = Arm64RegX13
  succ Arm64RegX13 = Arm64RegX14
  succ Arm64RegX14 = Arm64RegX15
  succ Arm64RegX15 = Arm64RegX16
  succ Arm64RegX16 = Arm64RegX17
  succ Arm64RegIp1 = Arm64RegX17
  succ Arm64RegX17 = Arm64RegX18
  succ Arm64RegIp0 = Arm64RegX18
  succ Arm64RegX18 = Arm64RegX19
  succ Arm64RegX19 = Arm64RegX20
  succ Arm64RegX20 = Arm64RegX21
  succ Arm64RegX21 = Arm64RegX22
  succ Arm64RegX22 = Arm64RegX23
  succ Arm64RegX23 = Arm64RegX24
  succ Arm64RegX24 = Arm64RegX25
  succ Arm64RegX25 = Arm64RegX26
  succ Arm64RegX26 = Arm64RegX27
  succ Arm64RegX27 = Arm64RegX28
  succ Arm64RegX28 = Arm64RegV0
  succ Arm64RegV0 = Arm64RegV1
  succ Arm64RegV1 = Arm64RegV2
  succ Arm64RegV2 = Arm64RegV3
  succ Arm64RegV3 = Arm64RegV4
  succ Arm64RegV4 = Arm64RegV5
  succ Arm64RegV5 = Arm64RegV6
  succ Arm64RegV6 = Arm64RegV7
  succ Arm64RegV7 = Arm64RegV8
  succ Arm64RegV8 = Arm64RegV9
  succ Arm64RegV9 = Arm64RegV10
  succ Arm64RegV10 = Arm64RegV11
  succ Arm64RegV11 = Arm64RegV12
  succ Arm64RegV12 = Arm64RegV13
  succ Arm64RegV13 = Arm64RegV14
  succ Arm64RegV14 = Arm64RegV15
  succ Arm64RegV15 = Arm64RegV16
  succ Arm64RegV16 = Arm64RegV17
  succ Arm64RegV17 = Arm64RegV18
  succ Arm64RegV18 = Arm64RegV19
  succ Arm64RegV19 = Arm64RegV20
  succ Arm64RegV20 = Arm64RegV21
  succ Arm64RegV21 = Arm64RegV22
  succ Arm64RegV22 = Arm64RegV23
  succ Arm64RegV23 = Arm64RegV24
  succ Arm64RegV24 = Arm64RegV25
  succ Arm64RegV25 = Arm64RegV26
  succ Arm64RegV26 = Arm64RegV27
  succ Arm64RegV27 = Arm64RegV28
  succ Arm64RegV28 = Arm64RegV29
  succ Arm64RegV29 = Arm64RegV30
  succ Arm64RegV30 = Arm64RegV31
  succ Arm64RegV31 = Arm64RegEnding
  succ Arm64RegEnding = error "Arm64Reg.succ: Arm64RegEnding has no successor"

  pred Arm64RegX29 = Arm64RegInvalid
  pred Arm64RegFp = Arm64RegInvalid
  pred Arm64RegX30 = Arm64RegX29
  pred Arm64RegLr = Arm64RegX29
  pred Arm64RegNzcv = Arm64RegX30
  pred Arm64RegSp = Arm64RegNzcv
  pred Arm64RegWsp = Arm64RegSp
  pred Arm64RegWzr = Arm64RegWsp
  pred Arm64RegXzr = Arm64RegWzr
  pred Arm64RegB0 = Arm64RegXzr
  pred Arm64RegB1 = Arm64RegB0
  pred Arm64RegB2 = Arm64RegB1
  pred Arm64RegB3 = Arm64RegB2
  pred Arm64RegB4 = Arm64RegB3
  pred Arm64RegB5 = Arm64RegB4
  pred Arm64RegB6 = Arm64RegB5
  pred Arm64RegB7 = Arm64RegB6
  pred Arm64RegB8 = Arm64RegB7
  pred Arm64RegB9 = Arm64RegB8
  pred Arm64RegB10 = Arm64RegB9
  pred Arm64RegB11 = Arm64RegB10
  pred Arm64RegB12 = Arm64RegB11
  pred Arm64RegB13 = Arm64RegB12
  pred Arm64RegB14 = Arm64RegB13
  pred Arm64RegB15 = Arm64RegB14
  pred Arm64RegB16 = Arm64RegB15
  pred Arm64RegB17 = Arm64RegB16
  pred Arm64RegB18 = Arm64RegB17
  pred Arm64RegB19 = Arm64RegB18
  pred Arm64RegB20 = Arm64RegB19
  pred Arm64RegB21 = Arm64RegB20
  pred Arm64RegB22 = Arm64RegB21
  pred Arm64RegB23 = Arm64RegB22
  pred Arm64RegB24 = Arm64RegB23
  pred Arm64RegB25 = Arm64RegB24
  pred Arm64RegB26 = Arm64RegB25
  pred Arm64RegB27 = Arm64RegB26
  pred Arm64RegB28 = Arm64RegB27
  pred Arm64RegB29 = Arm64RegB28
  pred Arm64RegB30 = Arm64RegB29
  pred Arm64RegB31 = Arm64RegB30
  pred Arm64RegD0 = Arm64RegB31
  pred Arm64RegD1 = Arm64RegD0
  pred Arm64RegD2 = Arm64RegD1
  pred Arm64RegD3 = Arm64RegD2
  pred Arm64RegD4 = Arm64RegD3
  pred Arm64RegD5 = Arm64RegD4
  pred Arm64RegD6 = Arm64RegD5
  pred Arm64RegD7 = Arm64RegD6
  pred Arm64RegD8 = Arm64RegD7
  pred Arm64RegD9 = Arm64RegD8
  pred Arm64RegD10 = Arm64RegD9
  pred Arm64RegD11 = Arm64RegD10
  pred Arm64RegD12 = Arm64RegD11
  pred Arm64RegD13 = Arm64RegD12
  pred Arm64RegD14 = Arm64RegD13
  pred Arm64RegD15 = Arm64RegD14
  pred Arm64RegD16 = Arm64RegD15
  pred Arm64RegD17 = Arm64RegD16
  pred Arm64RegD18 = Arm64RegD17
  pred Arm64RegD19 = Arm64RegD18
  pred Arm64RegD20 = Arm64RegD19
  pred Arm64RegD21 = Arm64RegD20
  pred Arm64RegD22 = Arm64RegD21
  pred Arm64RegD23 = Arm64RegD22
  pred Arm64RegD24 = Arm64RegD23
  pred Arm64RegD25 = Arm64RegD24
  pred Arm64RegD26 = Arm64RegD25
  pred Arm64RegD27 = Arm64RegD26
  pred Arm64RegD28 = Arm64RegD27
  pred Arm64RegD29 = Arm64RegD28
  pred Arm64RegD30 = Arm64RegD29
  pred Arm64RegD31 = Arm64RegD30
  pred Arm64RegH0 = Arm64RegD31
  pred Arm64RegH1 = Arm64RegH0
  pred Arm64RegH2 = Arm64RegH1
  pred Arm64RegH3 = Arm64RegH2
  pred Arm64RegH4 = Arm64RegH3
  pred Arm64RegH5 = Arm64RegH4
  pred Arm64RegH6 = Arm64RegH5
  pred Arm64RegH7 = Arm64RegH6
  pred Arm64RegH8 = Arm64RegH7
  pred Arm64RegH9 = Arm64RegH8
  pred Arm64RegH10 = Arm64RegH9
  pred Arm64RegH11 = Arm64RegH10
  pred Arm64RegH12 = Arm64RegH11
  pred Arm64RegH13 = Arm64RegH12
  pred Arm64RegH14 = Arm64RegH13
  pred Arm64RegH15 = Arm64RegH14
  pred Arm64RegH16 = Arm64RegH15
  pred Arm64RegH17 = Arm64RegH16
  pred Arm64RegH18 = Arm64RegH17
  pred Arm64RegH19 = Arm64RegH18
  pred Arm64RegH20 = Arm64RegH19
  pred Arm64RegH21 = Arm64RegH20
  pred Arm64RegH22 = Arm64RegH21
  pred Arm64RegH23 = Arm64RegH22
  pred Arm64RegH24 = Arm64RegH23
  pred Arm64RegH25 = Arm64RegH24
  pred Arm64RegH26 = Arm64RegH25
  pred Arm64RegH27 = Arm64RegH26
  pred Arm64RegH28 = Arm64RegH27
  pred Arm64RegH29 = Arm64RegH28
  pred Arm64RegH30 = Arm64RegH29
  pred Arm64RegH31 = Arm64RegH30
  pred Arm64RegQ0 = Arm64RegH31
  pred Arm64RegQ1 = Arm64RegQ0
  pred Arm64RegQ2 = Arm64RegQ1
  pred Arm64RegQ3 = Arm64RegQ2
  pred Arm64RegQ4 = Arm64RegQ3
  pred Arm64RegQ5 = Arm64RegQ4
  pred Arm64RegQ6 = Arm64RegQ5
  pred Arm64RegQ7 = Arm64RegQ6
  pred Arm64RegQ8 = Arm64RegQ7
  pred Arm64RegQ9 = Arm64RegQ8
  pred Arm64RegQ10 = Arm64RegQ9
  pred Arm64RegQ11 = Arm64RegQ10
  pred Arm64RegQ12 = Arm64RegQ11
  pred Arm64RegQ13 = Arm64RegQ12
  pred Arm64RegQ14 = Arm64RegQ13
  pred Arm64RegQ15 = Arm64RegQ14
  pred Arm64RegQ16 = Arm64RegQ15
  pred Arm64RegQ17 = Arm64RegQ16
  pred Arm64RegQ18 = Arm64RegQ17
  pred Arm64RegQ19 = Arm64RegQ18
  pred Arm64RegQ20 = Arm64RegQ19
  pred Arm64RegQ21 = Arm64RegQ20
  pred Arm64RegQ22 = Arm64RegQ21
  pred Arm64RegQ23 = Arm64RegQ22
  pred Arm64RegQ24 = Arm64RegQ23
  pred Arm64RegQ25 = Arm64RegQ24
  pred Arm64RegQ26 = Arm64RegQ25
  pred Arm64RegQ27 = Arm64RegQ26
  pred Arm64RegQ28 = Arm64RegQ27
  pred Arm64RegQ29 = Arm64RegQ28
  pred Arm64RegQ30 = Arm64RegQ29
  pred Arm64RegQ31 = Arm64RegQ30
  pred Arm64RegS0 = Arm64RegQ31
  pred Arm64RegS1 = Arm64RegS0
  pred Arm64RegS2 = Arm64RegS1
  pred Arm64RegS3 = Arm64RegS2
  pred Arm64RegS4 = Arm64RegS3
  pred Arm64RegS5 = Arm64RegS4
  pred Arm64RegS6 = Arm64RegS5
  pred Arm64RegS7 = Arm64RegS6
  pred Arm64RegS8 = Arm64RegS7
  pred Arm64RegS9 = Arm64RegS8
  pred Arm64RegS10 = Arm64RegS9
  pred Arm64RegS11 = Arm64RegS10
  pred Arm64RegS12 = Arm64RegS11
  pred Arm64RegS13 = Arm64RegS12
  pred Arm64RegS14 = Arm64RegS13
  pred Arm64RegS15 = Arm64RegS14
  pred Arm64RegS16 = Arm64RegS15
  pred Arm64RegS17 = Arm64RegS16
  pred Arm64RegS18 = Arm64RegS17
  pred Arm64RegS19 = Arm64RegS18
  pred Arm64RegS20 = Arm64RegS19
  pred Arm64RegS21 = Arm64RegS20
  pred Arm64RegS22 = Arm64RegS21
  pred Arm64RegS23 = Arm64RegS22
  pred Arm64RegS24 = Arm64RegS23
  pred Arm64RegS25 = Arm64RegS24
  pred Arm64RegS26 = Arm64RegS25
  pred Arm64RegS27 = Arm64RegS26
  pred Arm64RegS28 = Arm64RegS27
  pred Arm64RegS29 = Arm64RegS28
  pred Arm64RegS30 = Arm64RegS29
  pred Arm64RegS31 = Arm64RegS30
  pred Arm64RegW0 = Arm64RegS31
  pred Arm64RegW1 = Arm64RegW0
  pred Arm64RegW2 = Arm64RegW1
  pred Arm64RegW3 = Arm64RegW2
  pred Arm64RegW4 = Arm64RegW3
  pred Arm64RegW5 = Arm64RegW4
  pred Arm64RegW6 = Arm64RegW5
  pred Arm64RegW7 = Arm64RegW6
  pred Arm64RegW8 = Arm64RegW7
  pred Arm64RegW9 = Arm64RegW8
  pred Arm64RegW10 = Arm64RegW9
  pred Arm64RegW11 = Arm64RegW10
  pred Arm64RegW12 = Arm64RegW11
  pred Arm64RegW13 = Arm64RegW12
  pred Arm64RegW14 = Arm64RegW13
  pred Arm64RegW15 = Arm64RegW14
  pred Arm64RegW16 = Arm64RegW15
  pred Arm64RegW17 = Arm64RegW16
  pred Arm64RegW18 = Arm64RegW17
  pred Arm64RegW19 = Arm64RegW18
  pred Arm64RegW20 = Arm64RegW19
  pred Arm64RegW21 = Arm64RegW20
  pred Arm64RegW22 = Arm64RegW21
  pred Arm64RegW23 = Arm64RegW22
  pred Arm64RegW24 = Arm64RegW23
  pred Arm64RegW25 = Arm64RegW24
  pred Arm64RegW26 = Arm64RegW25
  pred Arm64RegW27 = Arm64RegW26
  pred Arm64RegW28 = Arm64RegW27
  pred Arm64RegW29 = Arm64RegW28
  pred Arm64RegW30 = Arm64RegW29
  pred Arm64RegX0 = Arm64RegW30
  pred Arm64RegX1 = Arm64RegX0
  pred Arm64RegX2 = Arm64RegX1
  pred Arm64RegX3 = Arm64RegX2
  pred Arm64RegX4 = Arm64RegX3
  pred Arm64RegX5 = Arm64RegX4
  pred Arm64RegX6 = Arm64RegX5
  pred Arm64RegX7 = Arm64RegX6
  pred Arm64RegX8 = Arm64RegX7
  pred Arm64RegX9 = Arm64RegX8
  pred Arm64RegX10 = Arm64RegX9
  pred Arm64RegX11 = Arm64RegX10
  pred Arm64RegX12 = Arm64RegX11
  pred Arm64RegX13 = Arm64RegX12
  pred Arm64RegX14 = Arm64RegX13
  pred Arm64RegX15 = Arm64RegX14
  pred Arm64RegX16 = Arm64RegX15
  pred Arm64RegIp1 = Arm64RegX15
  pred Arm64RegX17 = Arm64RegX16
  pred Arm64RegIp0 = Arm64RegX16
  pred Arm64RegX18 = Arm64RegX17
  pred Arm64RegX19 = Arm64RegX18
  pred Arm64RegX20 = Arm64RegX19
  pred Arm64RegX21 = Arm64RegX20
  pred Arm64RegX22 = Arm64RegX21
  pred Arm64RegX23 = Arm64RegX22
  pred Arm64RegX24 = Arm64RegX23
  pred Arm64RegX25 = Arm64RegX24
  pred Arm64RegX26 = Arm64RegX25
  pred Arm64RegX27 = Arm64RegX26
  pred Arm64RegX28 = Arm64RegX27
  pred Arm64RegV0 = Arm64RegX28
  pred Arm64RegV1 = Arm64RegV0
  pred Arm64RegV2 = Arm64RegV1
  pred Arm64RegV3 = Arm64RegV2
  pred Arm64RegV4 = Arm64RegV3
  pred Arm64RegV5 = Arm64RegV4
  pred Arm64RegV6 = Arm64RegV5
  pred Arm64RegV7 = Arm64RegV6
  pred Arm64RegV8 = Arm64RegV7
  pred Arm64RegV9 = Arm64RegV8
  pred Arm64RegV10 = Arm64RegV9
  pred Arm64RegV11 = Arm64RegV10
  pred Arm64RegV12 = Arm64RegV11
  pred Arm64RegV13 = Arm64RegV12
  pred Arm64RegV14 = Arm64RegV13
  pred Arm64RegV15 = Arm64RegV14
  pred Arm64RegV16 = Arm64RegV15
  pred Arm64RegV17 = Arm64RegV16
  pred Arm64RegV18 = Arm64RegV17
  pred Arm64RegV19 = Arm64RegV18
  pred Arm64RegV20 = Arm64RegV19
  pred Arm64RegV21 = Arm64RegV20
  pred Arm64RegV22 = Arm64RegV21
  pred Arm64RegV23 = Arm64RegV22
  pred Arm64RegV24 = Arm64RegV23
  pred Arm64RegV25 = Arm64RegV24
  pred Arm64RegV26 = Arm64RegV25
  pred Arm64RegV27 = Arm64RegV26
  pred Arm64RegV28 = Arm64RegV27
  pred Arm64RegV29 = Arm64RegV28
  pred Arm64RegV30 = Arm64RegV29
  pred Arm64RegV31 = Arm64RegV30
  pred Arm64RegEnding = Arm64RegV31
  pred Arm64RegInvalid = error "Arm64Reg.pred: Arm64RegInvalid 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 Arm64RegEnding

  fromEnum Arm64RegInvalid = 0
  fromEnum Arm64RegX29 = 1
  fromEnum Arm64RegFp = 1
  fromEnum Arm64RegX30 = 2
  fromEnum Arm64RegLr = 2
  fromEnum Arm64RegNzcv = 3
  fromEnum Arm64RegSp = 4
  fromEnum Arm64RegWsp = 5
  fromEnum Arm64RegWzr = 6
  fromEnum Arm64RegXzr = 7
  fromEnum Arm64RegB0 = 8
  fromEnum Arm64RegB1 = 9
  fromEnum Arm64RegB2 = 10
  fromEnum Arm64RegB3 = 11
  fromEnum Arm64RegB4 = 12
  fromEnum Arm64RegB5 = 13
  fromEnum Arm64RegB6 = 14
  fromEnum Arm64RegB7 = 15
  fromEnum Arm64RegB8 = 16
  fromEnum Arm64RegB9 = 17
  fromEnum Arm64RegB10 = 18
  fromEnum Arm64RegB11 = 19
  fromEnum Arm64RegB12 = 20
  fromEnum Arm64RegB13 = 21
  fromEnum Arm64RegB14 = 22
  fromEnum Arm64RegB15 = 23
  fromEnum Arm64RegB16 = 24
  fromEnum Arm64RegB17 = 25
  fromEnum Arm64RegB18 = 26
  fromEnum Arm64RegB19 = 27
  fromEnum Arm64RegB20 = 28
  fromEnum Arm64RegB21 = 29
  fromEnum Arm64RegB22 = 30
  fromEnum Arm64RegB23 = 31
  fromEnum Arm64RegB24 = 32
  fromEnum Arm64RegB25 = 33
  fromEnum Arm64RegB26 = 34
  fromEnum Arm64RegB27 = 35
  fromEnum Arm64RegB28 = 36
  fromEnum Arm64RegB29 = 37
  fromEnum Arm64RegB30 = 38
  fromEnum Arm64RegB31 = 39
  fromEnum Arm64RegD0 = 40
  fromEnum Arm64RegD1 = 41
  fromEnum Arm64RegD2 = 42
  fromEnum Arm64RegD3 = 43
  fromEnum Arm64RegD4 = 44
  fromEnum Arm64RegD5 = 45
  fromEnum Arm64RegD6 = 46
  fromEnum Arm64RegD7 = 47
  fromEnum Arm64RegD8 = 48
  fromEnum Arm64RegD9 = 49
  fromEnum Arm64RegD10 = 50
  fromEnum Arm64RegD11 = 51
  fromEnum Arm64RegD12 = 52
  fromEnum Arm64RegD13 = 53
  fromEnum Arm64RegD14 = 54
  fromEnum Arm64RegD15 = 55
  fromEnum Arm64RegD16 = 56
  fromEnum Arm64RegD17 = 57
  fromEnum Arm64RegD18 = 58
  fromEnum Arm64RegD19 = 59
  fromEnum Arm64RegD20 = 60
  fromEnum Arm64RegD21 = 61
  fromEnum Arm64RegD22 = 62
  fromEnum Arm64RegD23 = 63
  fromEnum Arm64RegD24 = 64
  fromEnum Arm64RegD25 = 65
  fromEnum Arm64RegD26 = 66
  fromEnum Arm64RegD27 = 67
  fromEnum Arm64RegD28 = 68
  fromEnum Arm64RegD29 = 69
  fromEnum Arm64RegD30 = 70
  fromEnum Arm64RegD31 = 71
  fromEnum Arm64RegH0 = 72
  fromEnum Arm64RegH1 = 73
  fromEnum Arm64RegH2 = 74
  fromEnum Arm64RegH3 = 75
  fromEnum Arm64RegH4 = 76
  fromEnum Arm64RegH5 = 77
  fromEnum Arm64RegH6 = 78
  fromEnum Arm64RegH7 = 79
  fromEnum Arm64RegH8 = 80
  fromEnum Arm64RegH9 = 81
  fromEnum Arm64RegH10 = 82
  fromEnum Arm64RegH11 = 83
  fromEnum Arm64RegH12 = 84
  fromEnum Arm64RegH13 = 85
  fromEnum Arm64RegH14 = 86
  fromEnum Arm64RegH15 = 87
  fromEnum Arm64RegH16 = 88
  fromEnum Arm64RegH17 = 89
  fromEnum Arm64RegH18 = 90
  fromEnum Arm64RegH19 = 91
  fromEnum Arm64RegH20 = 92
  fromEnum Arm64RegH21 = 93
  fromEnum Arm64RegH22 = 94
  fromEnum Arm64RegH23 = 95
  fromEnum Arm64RegH24 = 96
  fromEnum Arm64RegH25 = 97
  fromEnum Arm64RegH26 = 98
  fromEnum Arm64RegH27 = 99
  fromEnum Arm64RegH28 = 100
  fromEnum Arm64RegH29 = 101
  fromEnum Arm64RegH30 = 102
  fromEnum Arm64RegH31 = 103
  fromEnum Arm64RegQ0 = 104
  fromEnum Arm64RegQ1 = 105
  fromEnum Arm64RegQ2 = 106
  fromEnum Arm64RegQ3 = 107
  fromEnum Arm64RegQ4 = 108
  fromEnum Arm64RegQ5 = 109
  fromEnum Arm64RegQ6 = 110
  fromEnum Arm64RegQ7 = 111
  fromEnum Arm64RegQ8 = 112
  fromEnum Arm64RegQ9 = 113
  fromEnum Arm64RegQ10 = 114
  fromEnum Arm64RegQ11 = 115
  fromEnum Arm64RegQ12 = 116
  fromEnum Arm64RegQ13 = 117
  fromEnum Arm64RegQ14 = 118
  fromEnum Arm64RegQ15 = 119
  fromEnum Arm64RegQ16 = 120
  fromEnum Arm64RegQ17 = 121
  fromEnum Arm64RegQ18 = 122
  fromEnum Arm64RegQ19 = 123
  fromEnum Arm64RegQ20 = 124
  fromEnum Arm64RegQ21 = 125
  fromEnum Arm64RegQ22 = 126
  fromEnum Arm64RegQ23 = 127
  fromEnum Arm64RegQ24 = 128
  fromEnum Arm64RegQ25 = 129
  fromEnum Arm64RegQ26 = 130
  fromEnum Arm64RegQ27 = 131
  fromEnum Arm64RegQ28 = 132
  fromEnum Arm64RegQ29 = 133
  fromEnum Arm64RegQ30 = 134
  fromEnum Arm64RegQ31 = 135
  fromEnum Arm64RegS0 = 136
  fromEnum Arm64RegS1 = 137
  fromEnum Arm64RegS2 = 138
  fromEnum Arm64RegS3 = 139
  fromEnum Arm64RegS4 = 140
  fromEnum Arm64RegS5 = 141
  fromEnum Arm64RegS6 = 142
  fromEnum Arm64RegS7 = 143
  fromEnum Arm64RegS8 = 144
  fromEnum Arm64RegS9 = 145
  fromEnum Arm64RegS10 = 146
  fromEnum Arm64RegS11 = 147
  fromEnum Arm64RegS12 = 148
  fromEnum Arm64RegS13 = 149
  fromEnum Arm64RegS14 = 150
  fromEnum Arm64RegS15 = 151
  fromEnum Arm64RegS16 = 152
  fromEnum Arm64RegS17 = 153
  fromEnum Arm64RegS18 = 154
  fromEnum Arm64RegS19 = 155
  fromEnum Arm64RegS20 = 156
  fromEnum Arm64RegS21 = 157
  fromEnum Arm64RegS22 = 158
  fromEnum Arm64RegS23 = 159
  fromEnum Arm64RegS24 = 160
  fromEnum Arm64RegS25 = 161
  fromEnum Arm64RegS26 = 162
  fromEnum Arm64RegS27 = 163
  fromEnum Arm64RegS28 = 164
  fromEnum Arm64RegS29 = 165
  fromEnum Arm64RegS30 = 166
  fromEnum Arm64RegS31 = 167
  fromEnum Arm64RegW0 = 168
  fromEnum Arm64RegW1 = 169
  fromEnum Arm64RegW2 = 170
  fromEnum Arm64RegW3 = 171
  fromEnum Arm64RegW4 = 172
  fromEnum Arm64RegW5 = 173
  fromEnum Arm64RegW6 = 174
  fromEnum Arm64RegW7 = 175
  fromEnum Arm64RegW8 = 176
  fromEnum Arm64RegW9 = 177
  fromEnum Arm64RegW10 = 178
  fromEnum Arm64RegW11 = 179
  fromEnum Arm64RegW12 = 180
  fromEnum Arm64RegW13 = 181
  fromEnum Arm64RegW14 = 182
  fromEnum Arm64RegW15 = 183
  fromEnum Arm64RegW16 = 184
  fromEnum Arm64RegW17 = 185
  fromEnum Arm64RegW18 = 186
  fromEnum Arm64RegW19 = 187
  fromEnum Arm64RegW20 = 188
  fromEnum Arm64RegW21 = 189
  fromEnum Arm64RegW22 = 190
  fromEnum Arm64RegW23 = 191
  fromEnum Arm64RegW24 = 192
  fromEnum Arm64RegW25 = 193
  fromEnum Arm64RegW26 = 194
  fromEnum Arm64RegW27 = 195
  fromEnum Arm64RegW28 = 196
  fromEnum Arm64RegW29 = 197
  fromEnum Arm64RegW30 = 198
  fromEnum Arm64RegX0 = 199
  fromEnum Arm64RegX1 = 200
  fromEnum Arm64RegX2 = 201
  fromEnum Arm64RegX3 = 202
  fromEnum Arm64RegX4 = 203
  fromEnum Arm64RegX5 = 204
  fromEnum Arm64RegX6 = 205
  fromEnum Arm64RegX7 = 206
  fromEnum Arm64RegX8 = 207
  fromEnum Arm64RegX9 = 208
  fromEnum Arm64RegX10 = 209
  fromEnum Arm64RegX11 = 210
  fromEnum Arm64RegX12 = 211
  fromEnum Arm64RegX13 = 212
  fromEnum Arm64RegX14 = 213
  fromEnum Arm64RegX15 = 214
  fromEnum Arm64RegX16 = 215
  fromEnum Arm64RegIp1 = 215
  fromEnum Arm64RegX17 = 216
  fromEnum Arm64RegIp0 = 216
  fromEnum Arm64RegX18 = 217
  fromEnum Arm64RegX19 = 218
  fromEnum Arm64RegX20 = 219
  fromEnum Arm64RegX21 = 220
  fromEnum Arm64RegX22 = 221
  fromEnum Arm64RegX23 = 222
  fromEnum Arm64RegX24 = 223
  fromEnum Arm64RegX25 = 224
  fromEnum Arm64RegX26 = 225
  fromEnum Arm64RegX27 = 226
  fromEnum Arm64RegX28 = 227
  fromEnum Arm64RegV0 = 228
  fromEnum Arm64RegV1 = 229
  fromEnum Arm64RegV2 = 230
  fromEnum Arm64RegV3 = 231
  fromEnum Arm64RegV4 = 232
  fromEnum Arm64RegV5 = 233
  fromEnum Arm64RegV6 = 234
  fromEnum Arm64RegV7 = 235
  fromEnum Arm64RegV8 = 236
  fromEnum Arm64RegV9 = 237
  fromEnum Arm64RegV10 = 238
  fromEnum Arm64RegV11 = 239
  fromEnum Arm64RegV12 = 240
  fromEnum Arm64RegV13 = 241
  fromEnum Arm64RegV14 = 242
  fromEnum Arm64RegV15 = 243
  fromEnum Arm64RegV16 = 244
  fromEnum Arm64RegV17 = 245
  fromEnum Arm64RegV18 = 246
  fromEnum Arm64RegV19 = 247
  fromEnum Arm64RegV20 = 248
  fromEnum Arm64RegV21 = 249
  fromEnum Arm64RegV22 = 250
  fromEnum Arm64RegV23 = 251
  fromEnum Arm64RegV24 = 252
  fromEnum Arm64RegV25 = 253
  fromEnum Arm64RegV26 = 254
  fromEnum Arm64RegV27 = 255
  fromEnum Arm64RegV28 = 256
  fromEnum Arm64RegV29 = 257
  fromEnum Arm64RegV30 = 258
  fromEnum Arm64RegV31 = 259
  fromEnum Arm64RegEnding = 260

  toEnum 0 = Arm64RegInvalid
  toEnum 1 = Arm64RegX29
  toEnum 2 = Arm64RegX30
  toEnum 3 = Arm64RegNzcv
  toEnum 4 = Arm64RegSp
  toEnum 5 = Arm64RegWsp
  toEnum 6 = Arm64RegWzr
  toEnum 7 = Arm64RegXzr
  toEnum 8 = Arm64RegB0
  toEnum 9 = Arm64RegB1
  toEnum 10 = Arm64RegB2
  toEnum 11 = Arm64RegB3
  toEnum 12 = Arm64RegB4
  toEnum 13 = Arm64RegB5
  toEnum 14 = Arm64RegB6
  toEnum 15 = Arm64RegB7
  toEnum 16 = Arm64RegB8
  toEnum 17 = Arm64RegB9
  toEnum 18 = Arm64RegB10
  toEnum 19 = Arm64RegB11
  toEnum 20 = Arm64RegB12
  toEnum 21 = Arm64RegB13
  toEnum 22 = Arm64RegB14
  toEnum 23 = Arm64RegB15
  toEnum 24 = Arm64RegB16
  toEnum 25 = Arm64RegB17
  toEnum 26 = Arm64RegB18
  toEnum 27 = Arm64RegB19
  toEnum 28 = Arm64RegB20
  toEnum 29 = Arm64RegB21
  toEnum 30 = Arm64RegB22
  toEnum 31 = Arm64RegB23
  toEnum 32 = Arm64RegB24
  toEnum 33 = Arm64RegB25
  toEnum 34 = Arm64RegB26
  toEnum 35 = Arm64RegB27
  toEnum 36 = Arm64RegB28
  toEnum 37 = Arm64RegB29
  toEnum 38 = Arm64RegB30
  toEnum 39 = Arm64RegB31
  toEnum 40 = Arm64RegD0
  toEnum 41 = Arm64RegD1
  toEnum 42 = Arm64RegD2
  toEnum 43 = Arm64RegD3
  toEnum 44 = Arm64RegD4
  toEnum 45 = Arm64RegD5
  toEnum 46 = Arm64RegD6
  toEnum 47 = Arm64RegD7
  toEnum 48 = Arm64RegD8
  toEnum 49 = Arm64RegD9
  toEnum 50 = Arm64RegD10
  toEnum 51 = Arm64RegD11
  toEnum 52 = Arm64RegD12
  toEnum 53 = Arm64RegD13
  toEnum 54 = Arm64RegD14
  toEnum 55 = Arm64RegD15
  toEnum 56 = Arm64RegD16
  toEnum 57 = Arm64RegD17
  toEnum 58 = Arm64RegD18
  toEnum 59 = Arm64RegD19
  toEnum 60 = Arm64RegD20
  toEnum 61 = Arm64RegD21
  toEnum 62 = Arm64RegD22
  toEnum 63 = Arm64RegD23
  toEnum 64 = Arm64RegD24
  toEnum 65 = Arm64RegD25
  toEnum 66 = Arm64RegD26
  toEnum 67 = Arm64RegD27
  toEnum 68 = Arm64RegD28
  toEnum 69 = Arm64RegD29
  toEnum 70 = Arm64RegD30
  toEnum 71 = Arm64RegD31
  toEnum 72 = Arm64RegH0
  toEnum 73 = Arm64RegH1
  toEnum 74 = Arm64RegH2
  toEnum 75 = Arm64RegH3
  toEnum 76 = Arm64RegH4
  toEnum 77 = Arm64RegH5
  toEnum 78 = Arm64RegH6
  toEnum 79 = Arm64RegH7
  toEnum 80 = Arm64RegH8
  toEnum 81 = Arm64RegH9
  toEnum 82 = Arm64RegH10
  toEnum 83 = Arm64RegH11
  toEnum 84 = Arm64RegH12
  toEnum 85 = Arm64RegH13
  toEnum 86 = Arm64RegH14
  toEnum 87 = Arm64RegH15
  toEnum 88 = Arm64RegH16
  toEnum 89 = Arm64RegH17
  toEnum 90 = Arm64RegH18
  toEnum 91 = Arm64RegH19
  toEnum 92 = Arm64RegH20
  toEnum 93 = Arm64RegH21
  toEnum 94 = Arm64RegH22
  toEnum 95 = Arm64RegH23
  toEnum 96 = Arm64RegH24
  toEnum 97 = Arm64RegH25
  toEnum 98 = Arm64RegH26
  toEnum 99 = Arm64RegH27
  toEnum 100 = Arm64RegH28
  toEnum 101 = Arm64RegH29
  toEnum 102 = Arm64RegH30
  toEnum 103 = Arm64RegH31
  toEnum 104 = Arm64RegQ0
  toEnum 105 = Arm64RegQ1
  toEnum 106 = Arm64RegQ2
  toEnum 107 = Arm64RegQ3
  toEnum 108 = Arm64RegQ4
  toEnum 109 = Arm64RegQ5
  toEnum 110 = Arm64RegQ6
  toEnum 111 = Arm64RegQ7
  toEnum 112 = Arm64RegQ8
  toEnum 113 = Arm64RegQ9
  toEnum 114 = Arm64RegQ10
  toEnum 115 = Arm64RegQ11
  toEnum 116 = Arm64RegQ12
  toEnum 117 = Arm64RegQ13
  toEnum 118 = Arm64RegQ14
  toEnum 119 = Arm64RegQ15
  toEnum 120 = Arm64RegQ16
  toEnum 121 = Arm64RegQ17
  toEnum 122 = Arm64RegQ18
  toEnum 123 = Arm64RegQ19
  toEnum 124 = Arm64RegQ20
  toEnum 125 = Arm64RegQ21
  toEnum 126 = Arm64RegQ22
  toEnum 127 = Arm64RegQ23
  toEnum 128 = Arm64RegQ24
  toEnum 129 = Arm64RegQ25
  toEnum 130 = Arm64RegQ26
  toEnum 131 = Arm64RegQ27
  toEnum 132 = Arm64RegQ28
  toEnum 133 = Arm64RegQ29
  toEnum 134 = Arm64RegQ30
  toEnum 135 = Arm64RegQ31
  toEnum 136 = Arm64RegS0
  toEnum 137 = Arm64RegS1
  toEnum 138 = Arm64RegS2
  toEnum 139 = Arm64RegS3
  toEnum 140 = Arm64RegS4
  toEnum 141 = Arm64RegS5
  toEnum 142 = Arm64RegS6
  toEnum 143 = Arm64RegS7
  toEnum 144 = Arm64RegS8
  toEnum 145 = Arm64RegS9
  toEnum 146 = Arm64RegS10
  toEnum 147 = Arm64RegS11
  toEnum 148 = Arm64RegS12
  toEnum 149 = Arm64RegS13
  toEnum 150 = Arm64RegS14
  toEnum 151 = Arm64RegS15
  toEnum 152 = Arm64RegS16
  toEnum 153 = Arm64RegS17
  toEnum 154 = Arm64RegS18
  toEnum 155 = Arm64RegS19
  toEnum 156 = Arm64RegS20
  toEnum 157 = Arm64RegS21
  toEnum 158 = Arm64RegS22
  toEnum 159 = Arm64RegS23
  toEnum 160 = Arm64RegS24
  toEnum 161 = Arm64RegS25
  toEnum 162 = Arm64RegS26
  toEnum 163 = Arm64RegS27
  toEnum 164 = Arm64RegS28
  toEnum 165 = Arm64RegS29
  toEnum 166 = Arm64RegS30
  toEnum 167 = Arm64RegS31
  toEnum 168 = Arm64RegW0
  toEnum 169 = Arm64RegW1
  toEnum 170 = Arm64RegW2
  toEnum 171 = Arm64RegW3
  toEnum 172 = Arm64RegW4
  toEnum 173 = Arm64RegW5
  toEnum 174 = Arm64RegW6
  toEnum 175 = Arm64RegW7
  toEnum 176 = Arm64RegW8
  toEnum 177 = Arm64RegW9
  toEnum 178 = Arm64RegW10
  toEnum 179 = Arm64RegW11
  toEnum 180 = Arm64RegW12
  toEnum 181 = Arm64RegW13
  toEnum 182 = Arm64RegW14
  toEnum 183 = Arm64RegW15
  toEnum 184 = Arm64RegW16
  toEnum 185 = Arm64RegW17
  toEnum 186 = Arm64RegW18
  toEnum 187 = Arm64RegW19
  toEnum 188 = Arm64RegW20
  toEnum 189 = Arm64RegW21
  toEnum 190 = Arm64RegW22
  toEnum 191 = Arm64RegW23
  toEnum 192 = Arm64RegW24
  toEnum 193 = Arm64RegW25
  toEnum 194 = Arm64RegW26
  toEnum 195 = Arm64RegW27
  toEnum 196 = Arm64RegW28
  toEnum 197 = Arm64RegW29
  toEnum 198 = Arm64RegW30
  toEnum 199 = Arm64RegX0
  toEnum 200 = Arm64RegX1
  toEnum 201 = Arm64RegX2
  toEnum 202 = Arm64RegX3
  toEnum 203 = Arm64RegX4
  toEnum 204 = Arm64RegX5
  toEnum 205 = Arm64RegX6
  toEnum 206 = Arm64RegX7
  toEnum 207 = Arm64RegX8
  toEnum 208 = Arm64RegX9
  toEnum 209 = Arm64RegX10
  toEnum 210 = Arm64RegX11
  toEnum 211 = Arm64RegX12
  toEnum 212 = Arm64RegX13
  toEnum 213 = Arm64RegX14
  toEnum 214 = Arm64RegX15
  toEnum 215 = Arm64RegX16
  toEnum 216 = Arm64RegX17
  toEnum 217 = Arm64RegX18
  toEnum 218 = Arm64RegX19
  toEnum 219 = Arm64RegX20
  toEnum 220 = Arm64RegX21
  toEnum 221 = Arm64RegX22
  toEnum 222 = Arm64RegX23
  toEnum 223 = Arm64RegX24
  toEnum 224 = Arm64RegX25
  toEnum 225 = Arm64RegX26
  toEnum 226 = Arm64RegX27
  toEnum 227 = Arm64RegX28
  toEnum 228 = Arm64RegV0
  toEnum 229 = Arm64RegV1
  toEnum 230 = Arm64RegV2
  toEnum 231 = Arm64RegV3
  toEnum 232 = Arm64RegV4
  toEnum 233 = Arm64RegV5
  toEnum 234 = Arm64RegV6
  toEnum 235 = Arm64RegV7
  toEnum 236 = Arm64RegV8
  toEnum 237 = Arm64RegV9
  toEnum 238 = Arm64RegV10
  toEnum 239 = Arm64RegV11
  toEnum 240 = Arm64RegV12
  toEnum 241 = Arm64RegV13
  toEnum 242 = Arm64RegV14
  toEnum 243 = Arm64RegV15
  toEnum 244 = Arm64RegV16
  toEnum 245 = Arm64RegV17
  toEnum 246 = Arm64RegV18
  toEnum 247 = Arm64RegV19
  toEnum 248 = Arm64RegV20
  toEnum 249 = Arm64RegV21
  toEnum 250 = Arm64RegV22
  toEnum 251 = Arm64RegV23
  toEnum 252 = Arm64RegV24
  toEnum 253 = Arm64RegV25
  toEnum 254 = Arm64RegV26
  toEnum 255 = Arm64RegV27
  toEnum 256 = Arm64RegV28
  toEnum 257 = Arm64RegV29
  toEnum 258 = Arm64RegV30
  toEnum 259 = Arm64RegV31
  toEnum 260 = Arm64RegEnding
  toEnum unmatched = error ("Arm64Reg.toEnum: Cannot match " ++ show unmatched)

{-# LINE 85 "src/Hapstone/Internal/Arm64.chs" #-}


-- | memory access operands
-- associated with 'Arm64OpMem' operand type
data Arm64OpMemStruct = Arm64OpMemStruct
    { base :: Arm64Reg -- ^ base register
    , index :: Arm64Reg -- ^ index register
    , disp :: Int32 -- ^ displacement/offset value
    } deriving (Show, Eq)

instance Storable Arm64OpMemStruct where
    sizeOf _ = 12
{-# LINE 96 "src/Hapstone/Internal/Arm64.chs" #-}

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

    peek p = Arm64OpMemStruct
        <$> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CInt}) p)
    poke p (Arm64OpMemStruct b i d) = 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 $ fromEnum d)

-- | possible operand types (corresponding to the tagged union in the C header)
data CsArm64OpValue
    = Reg Arm64Reg -- ^ register value for 'Arm64OpReg' operands
    | Imm Int64 -- ^ immediate value for 'Arm64OpImm' operands
    | CImm Int64 -- ^ index value for 'Arm64OpCimm' operands
    | Fp Double -- ^ floating point value for 'Arm64OpFp' operands
    | Mem Arm64OpMemStruct -- ^ base,index,disp value for 'Arm64OpMem' operands
    | Pstate Arm64Pstate -- ^ PState field of MSR instructions
    | Sys Word32 -- ^ IC/DC/AT/TLBI operation (see 'Arm64IcOp', 'Arm64DcOp',
                 -- 'Arm64AtOp', 'Arm64TlbiOp'), for 'Arm64OpSys' operands
    | Prefetch Arm64PrefetchOp -- ^ PRFM operation for 'Arm64OpPrefetch'
                               -- operands
    | Barrier Arm64BarrierOp -- ^ memory barrier operation (ISB/DMB/DSB
                             -- instructions), for 'Arm64OpBarrier' operands
    | Undefined -- ^ invalid operand value, for 'Arm64OpInvalid' operand
    deriving (Show, Eq)

-- | instruction operand
data CsArm64Op = CsArm64Op
    { vectorIndex :: Int32 -- ^ vector index for some vector operands, else -1
    , vas :: Arm64Vas -- ^ vector arrangement specifier
    , vess :: Arm64Vess -- ^ vector element size specifier
    , shift :: (Arm64Shifter, Word32) -- ^ shifter type and value
    , ext :: Arm64Extender -- ^ extender type
    , value :: CsArm64OpValue -- ^ operand type and value
    , access :: Word8 -- ^ the access mode TODO
    } deriving (Show, Eq)

instance Storable CsArm64Op where
    sizeOf _ = 48
    alignment _ = 8
    peek p = CsArm64Op
        <$> (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CInt}) p)
        <*> ((,) <$>
            ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 12 :: IO C2HSImp.CInt}) p) <*>
            (fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 16 :: IO C2HSImp.CUInt}) p))
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 20 :: IO C2HSImp.CInt}) p)
        <*> do
            t <- fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 24 :: IO C2HSImp.CInt}) p
            let bP = plusPtr p 32
            case toEnum t of
              Arm64OpReg -> (Reg . toEnum . fromIntegral) <$>
                  (peek bP :: IO CUInt)
              Arm64OpImm -> (Imm . fromIntegral) <$> (peek bP :: IO Int64)
              Arm64OpCimm -> (CImm . fromIntegral) <$> (peek bP :: IO Int64)
              Arm64OpFp -> (Fp . realToFrac) <$> (peek bP :: IO CDouble)
              Arm64OpMem -> Mem <$> peek bP
              Arm64OpRegMsr -> (Pstate . toEnum . fromIntegral) <$>
                 (peek bP :: IO CInt)
              Arm64OpSys -> (Sys . fromIntegral) <$> (peek bP :: IO CUInt)
              Arm64OpPrefetch -> (Prefetch . toEnum . fromIntegral) <$>
                 (peek bP :: IO CInt)
              Arm64OpBarrier -> (Barrier . toEnum . fromIntegral) <$>
                 (peek bP :: IO CInt)
              _ -> return Undefined
        <*> (peekByteOff p 44 :: IO Word8) -- access
    poke p (CsArm64Op vI va ve (sh, shV) ext val acc) = 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 va)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 8 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum ve)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 12 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum sh)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 16 (val :: C2HSImp.CUInt)}) p (fromIntegral shV)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 20 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum ext)
        let bP = plusPtr p 32
            setType = (\ptr val -> do {C2HSImp.pokeByteOff ptr 24 (val :: C2HSImp.CInt)}) p . fromIntegral . fromEnum
        case val of
          Reg r -> do
              poke bP (fromIntegral $ fromEnum r :: CUInt)
              setType Arm64OpReg
          Imm i -> do
              poke bP (fromIntegral i :: Int64)
              setType Arm64OpImm
          CImm i -> do
              poke bP (fromIntegral i :: Int64)
              setType Arm64OpCimm
          Fp f -> do
              poke bP (realToFrac f :: CDouble)
              setType Arm64OpFp
          Mem m -> do
              poke bP m
              setType Arm64OpMem
          Pstate p -> do
              poke bP (fromIntegral $ fromEnum p :: CInt)
              setType Arm64OpRegMsr
          Sys s -> do
              poke bP (fromIntegral s :: CUInt)
              setType Arm64OpSys
          Prefetch p -> do
              poke bP (fromIntegral $ fromEnum p :: CInt)
              setType Arm64OpPrefetch
          Barrier b -> do
              poke bP (fromIntegral $ fromEnum b :: CInt)
              setType Arm64OpBarrier
          _ -> setType Arm64OpInvalid
        pokeByteOff p 44 acc

-- | instruction datatype
data CsArm64 = CsArm64
    { cc :: Arm64ConditionCode -- ^ condition code
    , updateFlags :: Bool -- ^ does this instruction update flags?
    , writeback :: Bool -- ^ does this instruction request writeback?
    , operands :: [CsArm64Op] -- ^ operand list of this instruction,
                              -- *MUST* have <= 8 elements, else you'll get a
                              -- runtime error when you (implicitly) try to
                              -- write it to memory via it's Storable instance
    } deriving (Show, Eq)

instance Storable CsArm64 where
    sizeOf _ = 392
    alignment _ = 12
    peek p = CsArm64
        <$> (toEnum . fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p)
        <*> (toBool <$> (peekByteOff p 4 :: IO Word8)) -- update_flags
        <*> (toBool <$> (peekByteOff p 5 :: IO Word8)) -- writeback
        <*> do num <- fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 6 :: IO C2HSImp.CUChar}) p
               let ptr = plusPtr p (8)
{-# LINE 224 "src/Hapstone/Internal/Arm64.chs" #-}

               peekArray num ptr
    poke p (CsArm64 cc uF w o) = do
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum cc)
        pokeByteOff p 4 (fromBool uF :: Word8) -- update_flags
        pokeByteOff p 5 (fromBool w :: Word8) -- writeback
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 6 (val :: C2HSImp.CUChar)}) p (fromIntegral $ length o)
        if length o > 8
           then error "operands overflew 8 elements"
           else pokeArray (plusPtr p (8)) o

-- | ARM64 instructions
data Arm64Insn = Arm64InsInvalid
               | Arm64InsAbs
               | Arm64InsAdc
               | Arm64InsAddhn
               | Arm64InsAddhn2
               | Arm64InsAddp
               | Arm64InsAdd
               | Arm64InsAddv
               | Arm64InsAdr
               | Arm64InsAdrp
               | Arm64InsAesd
               | Arm64InsAese
               | Arm64InsAesimc
               | Arm64InsAesmc
               | Arm64InsAnd
               | Arm64InsAsr
               | Arm64InsB
               | Arm64InsBfm
               | Arm64InsBic
               | Arm64InsBif
               | Arm64InsBit
               | Arm64InsBl
               | Arm64InsBlr
               | Arm64InsBr
               | Arm64InsBrk
               | Arm64InsBsl
               | Arm64InsCbnz
               | Arm64InsCbz
               | Arm64InsCcmn
               | Arm64InsCcmp
               | Arm64InsClrex
               | Arm64InsCls
               | Arm64InsClz
               | Arm64InsCmeq
               | Arm64InsCmge
               | Arm64InsCmgt
               | Arm64InsCmhi
               | Arm64InsCmhs
               | Arm64InsCmle
               | Arm64InsCmlt
               | Arm64InsCmtst
               | Arm64InsCnt
               | Arm64InsMov
               | Arm64InsCrc32b
               | Arm64InsCrc32cb
               | Arm64InsCrc32ch
               | Arm64InsCrc32cw
               | Arm64InsCrc32cx
               | Arm64InsCrc32h
               | Arm64InsCrc32w
               | Arm64InsCrc32x
               | Arm64InsCsel
               | Arm64InsCsinc
               | Arm64InsCsinv
               | Arm64InsCsneg
               | Arm64InsDcps1
               | Arm64InsDcps2
               | Arm64InsDcps3
               | Arm64InsDmb
               | Arm64InsDrps
               | Arm64InsDsb
               | Arm64InsDup
               | Arm64InsEon
               | Arm64InsEor
               | Arm64InsEret
               | Arm64InsExtr
               | Arm64InsExt
               | Arm64InsFabd
               | Arm64InsFabs
               | Arm64InsFacge
               | Arm64InsFacgt
               | Arm64InsFadd
               | Arm64InsFaddp
               | Arm64InsFccmp
               | Arm64InsFccmpe
               | Arm64InsFcmeq
               | Arm64InsFcmge
               | Arm64InsFcmgt
               | Arm64InsFcmle
               | Arm64InsFcmlt
               | Arm64InsFcmp
               | Arm64InsFcmpe
               | Arm64InsFcsel
               | Arm64InsFcvtas
               | Arm64InsFcvtau
               | Arm64InsFcvt
               | Arm64InsFcvtl
               | Arm64InsFcvtl2
               | Arm64InsFcvtms
               | Arm64InsFcvtmu
               | Arm64InsFcvtns
               | Arm64InsFcvtnu
               | Arm64InsFcvtn
               | Arm64InsFcvtn2
               | Arm64InsFcvtps
               | Arm64InsFcvtpu
               | Arm64InsFcvtxn
               | Arm64InsFcvtxn2
               | Arm64InsFcvtzs
               | Arm64InsFcvtzu
               | Arm64InsFdiv
               | Arm64InsFmadd
               | Arm64InsFmax
               | Arm64InsFmaxnm
               | Arm64InsFmaxnmp
               | Arm64InsFmaxnmv
               | Arm64InsFmaxp
               | Arm64InsFmaxv
               | Arm64InsFmin
               | Arm64InsFminnm
               | Arm64InsFminnmp
               | Arm64InsFminnmv
               | Arm64InsFminp
               | Arm64InsFminv
               | Arm64InsFmla
               | Arm64InsFmls
               | Arm64InsFmov
               | Arm64InsFmsub
               | Arm64InsFmul
               | Arm64InsFmulx
               | Arm64InsFneg
               | Arm64InsFnmadd
               | Arm64InsFnmsub
               | Arm64InsFnmul
               | Arm64InsFrecpe
               | Arm64InsFrecps
               | Arm64InsFrecpx
               | Arm64InsFrinta
               | Arm64InsFrinti
               | Arm64InsFrintm
               | Arm64InsFrintn
               | Arm64InsFrintp
               | Arm64InsFrintx
               | Arm64InsFrintz
               | Arm64InsFrsqrte
               | Arm64InsFrsqrts
               | Arm64InsFsqrt
               | Arm64InsFsub
               | Arm64InsHint
               | Arm64InsHlt
               | Arm64InsHvc
               | Arm64InsIns
               | Arm64InsIsb
               | Arm64InsLd1
               | Arm64InsLd1r
               | Arm64InsLd2r
               | Arm64InsLd2
               | Arm64InsLd3r
               | Arm64InsLd3
               | Arm64InsLd4
               | Arm64InsLd4r
               | Arm64InsLdarb
               | Arm64InsLdarh
               | Arm64InsLdar
               | Arm64InsLdaxp
               | Arm64InsLdaxrb
               | Arm64InsLdaxrh
               | Arm64InsLdaxr
               | Arm64InsLdnp
               | Arm64InsLdp
               | Arm64InsLdpsw
               | Arm64InsLdrb
               | Arm64InsLdr
               | Arm64InsLdrh
               | Arm64InsLdrsb
               | Arm64InsLdrsh
               | Arm64InsLdrsw
               | Arm64InsLdtrb
               | Arm64InsLdtrh
               | Arm64InsLdtrsb
               | Arm64InsLdtrsh
               | Arm64InsLdtrsw
               | Arm64InsLdtr
               | Arm64InsLdurb
               | Arm64InsLdur
               | Arm64InsLdurh
               | Arm64InsLdursb
               | Arm64InsLdursh
               | Arm64InsLdursw
               | Arm64InsLdxp
               | Arm64InsLdxrb
               | Arm64InsLdxrh
               | Arm64InsLdxr
               | Arm64InsLsl
               | Arm64InsLsr
               | Arm64InsMadd
               | Arm64InsMla
               | Arm64InsMls
               | Arm64InsMovi
               | Arm64InsMovk
               | Arm64InsMovn
               | Arm64InsMovz
               | Arm64InsMrs
               | Arm64InsMsr
               | Arm64InsMsub
               | Arm64InsMul
               | Arm64InsMvni
               | Arm64InsNeg
               | Arm64InsNot
               | Arm64InsOrn
               | Arm64InsOrr
               | Arm64InsPmull2
               | Arm64InsPmull
               | Arm64InsPmul
               | Arm64InsPrfm
               | Arm64InsPrfum
               | Arm64InsRaddhn
               | Arm64InsRaddhn2
               | Arm64InsRbit
               | Arm64InsRet
               | Arm64InsRev16
               | Arm64InsRev32
               | Arm64InsRev64
               | Arm64InsRev
               | Arm64InsRor
               | Arm64InsRshrn2
               | Arm64InsRshrn
               | Arm64InsRsubhn
               | Arm64InsRsubhn2
               | Arm64InsSabal2
               | Arm64InsSabal
               | Arm64InsSaba
               | Arm64InsSabdl2
               | Arm64InsSabdl
               | Arm64InsSabd
               | Arm64InsSadalp
               | Arm64InsSaddlp
               | Arm64InsSaddlv
               | Arm64InsSaddl2
               | Arm64InsSaddl
               | Arm64InsSaddw2
               | Arm64InsSaddw
               | Arm64InsSbc
               | Arm64InsSbfm
               | Arm64InsScvtf
               | Arm64InsSdiv
               | Arm64InsSha1c
               | Arm64InsSha1h
               | Arm64InsSha1m
               | Arm64InsSha1p
               | Arm64InsSha1su0
               | Arm64InsSha1su1
               | Arm64InsSha256h2
               | Arm64InsSha256h
               | Arm64InsSha256su0
               | Arm64InsSha256su1
               | Arm64InsShadd
               | Arm64InsShll2
               | Arm64InsShll
               | Arm64InsShl
               | Arm64InsShrn2
               | Arm64InsShrn
               | Arm64InsShsub
               | Arm64InsSli
               | Arm64InsSmaddl
               | Arm64InsSmaxp
               | Arm64InsSmaxv
               | Arm64InsSmax
               | Arm64InsSmc
               | Arm64InsSminp
               | Arm64InsSminv
               | Arm64InsSmin
               | Arm64InsSmlal2
               | Arm64InsSmlal
               | Arm64InsSmlsl2
               | Arm64InsSmlsl
               | Arm64InsSmov
               | Arm64InsSmsubl
               | Arm64InsSmulh
               | Arm64InsSmull2
               | Arm64InsSmull
               | Arm64InsSqabs
               | Arm64InsSqadd
               | Arm64InsSqdmlal
               | Arm64InsSqdmlal2
               | Arm64InsSqdmlsl
               | Arm64InsSqdmlsl2
               | Arm64InsSqdmulh
               | Arm64InsSqdmull
               | Arm64InsSqdmull2
               | Arm64InsSqneg
               | Arm64InsSqrdmulh
               | Arm64InsSqrshl
               | Arm64InsSqrshrn
               | Arm64InsSqrshrn2
               | Arm64InsSqrshrun
               | Arm64InsSqrshrun2
               | Arm64InsSqshlu
               | Arm64InsSqshl
               | Arm64InsSqshrn
               | Arm64InsSqshrn2
               | Arm64InsSqshrun
               | Arm64InsSqshrun2
               | Arm64InsSqsub
               | Arm64InsSqxtn2
               | Arm64InsSqxtn
               | Arm64InsSqxtun2
               | Arm64InsSqxtun
               | Arm64InsSrhadd
               | Arm64InsSri
               | Arm64InsSrshl
               | Arm64InsSrshr
               | Arm64InsSrsra
               | Arm64InsSshll2
               | Arm64InsSshll
               | Arm64InsSshl
               | Arm64InsSshr
               | Arm64InsSsra
               | Arm64InsSsubl2
               | Arm64InsSsubl
               | Arm64InsSsubw2
               | Arm64InsSsubw
               | Arm64InsSt1
               | Arm64InsSt2
               | Arm64InsSt3
               | Arm64InsSt4
               | Arm64InsStlrb
               | Arm64InsStlrh
               | Arm64InsStlr
               | Arm64InsStlxp
               | Arm64InsStlxrb
               | Arm64InsStlxrh
               | Arm64InsStlxr
               | Arm64InsStnp
               | Arm64InsStp
               | Arm64InsStrb
               | Arm64InsStr
               | Arm64InsStrh
               | Arm64InsSttrb
               | Arm64InsSttrh
               | Arm64InsSttr
               | Arm64InsSturb
               | Arm64InsStur
               | Arm64InsSturh
               | Arm64InsStxp
               | Arm64InsStxrb
               | Arm64InsStxrh
               | Arm64InsStxr
               | Arm64InsSubhn
               | Arm64InsSubhn2
               | Arm64InsSub
               | Arm64InsSuqadd
               | Arm64InsSvc
               | Arm64InsSysl
               | Arm64InsSys
               | Arm64InsTbl
               | Arm64InsTbnz
               | Arm64InsTbx
               | Arm64InsTbz
               | Arm64InsTrn1
               | Arm64InsTrn2
               | Arm64InsUabal2
               | Arm64InsUabal
               | Arm64InsUaba
               | Arm64InsUabdl2
               | Arm64InsUabdl
               | Arm64InsUabd
               | Arm64InsUadalp
               | Arm64InsUaddlp
               | Arm64InsUaddlv
               | Arm64InsUaddl2
               | Arm64InsUaddl
               | Arm64InsUaddw2
               | Arm64InsUaddw
               | Arm64InsUbfm
               | Arm64InsUcvtf
               | Arm64InsUdiv
               | Arm64InsUhadd
               | Arm64InsUhsub
               | Arm64InsUmaddl
               | Arm64InsUmaxp
               | Arm64InsUmaxv
               | Arm64InsUmax
               | Arm64InsUminp
               | Arm64InsUminv
               | Arm64InsUmin
               | Arm64InsUmlal2
               | Arm64InsUmlal
               | Arm64InsUmlsl2
               | Arm64InsUmlsl
               | Arm64InsUmov
               | Arm64InsUmsubl
               | Arm64InsUmulh
               | Arm64InsUmull2
               | Arm64InsUmull
               | Arm64InsUqadd
               | Arm64InsUqrshl
               | Arm64InsUqrshrn
               | Arm64InsUqrshrn2
               | Arm64InsUqshl
               | Arm64InsUqshrn
               | Arm64InsUqshrn2
               | Arm64InsUqsub
               | Arm64InsUqxtn2
               | Arm64InsUqxtn
               | Arm64InsUrecpe
               | Arm64InsUrhadd
               | Arm64InsUrshl
               | Arm64InsUrshr
               | Arm64InsUrsqrte
               | Arm64InsUrsra
               | Arm64InsUshll2
               | Arm64InsUshll
               | Arm64InsUshl
               | Arm64InsUshr
               | Arm64InsUsqadd
               | Arm64InsUsra
               | Arm64InsUsubl2
               | Arm64InsUsubl
               | Arm64InsUsubw2
               | Arm64InsUsubw
               | Arm64InsUzp1
               | Arm64InsUzp2
               | Arm64InsXtn2
               | Arm64InsXtn
               | Arm64InsZip1
               | Arm64InsZip2
               | Arm64InsMneg
               | Arm64InsUmnegl
               | Arm64InsSmnegl
               | Arm64InsNop
               | Arm64InsYield
               | Arm64InsWfe
               | Arm64InsWfi
               | Arm64InsSev
               | Arm64InsSevl
               | Arm64InsNgc
               | Arm64InsSbfiz
               | Arm64InsUbfiz
               | Arm64InsSbfx
               | Arm64InsUbfx
               | Arm64InsBfi
               | Arm64InsBfxil
               | Arm64InsCmn
               | Arm64InsMvn
               | Arm64InsTst
               | Arm64InsCset
               | Arm64InsCinc
               | Arm64InsCsetm
               | Arm64InsCinv
               | Arm64InsCneg
               | Arm64InsSxtb
               | Arm64InsSxth
               | Arm64InsSxtw
               | Arm64InsCmp
               | Arm64InsUxtb
               | Arm64InsUxth
               | Arm64InsUxtw
               | Arm64InsIc
               | Arm64InsDc
               | Arm64InsAt
               | Arm64InsTlbi
               | Arm64InsEnding
  deriving (Show,Eq,Bounded)
instance Enum Arm64Insn where
  succ Arm64InsInvalid = Arm64InsAbs
  succ Arm64InsAbs = Arm64InsAdc
  succ Arm64InsAdc = Arm64InsAddhn
  succ Arm64InsAddhn = Arm64InsAddhn2
  succ Arm64InsAddhn2 = Arm64InsAddp
  succ Arm64InsAddp = Arm64InsAdd
  succ Arm64InsAdd = Arm64InsAddv
  succ Arm64InsAddv = Arm64InsAdr
  succ Arm64InsAdr = Arm64InsAdrp
  succ Arm64InsAdrp = Arm64InsAesd
  succ Arm64InsAesd = Arm64InsAese
  succ Arm64InsAese = Arm64InsAesimc
  succ Arm64InsAesimc = Arm64InsAesmc
  succ Arm64InsAesmc = Arm64InsAnd
  succ Arm64InsAnd = Arm64InsAsr
  succ Arm64InsAsr = Arm64InsB
  succ Arm64InsB = Arm64InsBfm
  succ Arm64InsBfm = Arm64InsBic
  succ Arm64InsBic = Arm64InsBif
  succ Arm64InsBif = Arm64InsBit
  succ Arm64InsBit = Arm64InsBl
  succ Arm64InsBl = Arm64InsBlr
  succ Arm64InsBlr = Arm64InsBr
  succ Arm64InsBr = Arm64InsBrk
  succ Arm64InsBrk = Arm64InsBsl
  succ Arm64InsBsl = Arm64InsCbnz
  succ Arm64InsCbnz = Arm64InsCbz
  succ Arm64InsCbz = Arm64InsCcmn
  succ Arm64InsCcmn = Arm64InsCcmp
  succ Arm64InsCcmp = Arm64InsClrex
  succ Arm64InsClrex = Arm64InsCls
  succ Arm64InsCls = Arm64InsClz
  succ Arm64InsClz = Arm64InsCmeq
  succ Arm64InsCmeq = Arm64InsCmge
  succ Arm64InsCmge = Arm64InsCmgt
  succ Arm64InsCmgt = Arm64InsCmhi
  succ Arm64InsCmhi = Arm64InsCmhs
  succ Arm64InsCmhs = Arm64InsCmle
  succ Arm64InsCmle = Arm64InsCmlt
  succ Arm64InsCmlt = Arm64InsCmtst
  succ Arm64InsCmtst = Arm64InsCnt
  succ Arm64InsCnt = Arm64InsMov
  succ Arm64InsMov = Arm64InsCrc32b
  succ Arm64InsCrc32b = Arm64InsCrc32cb
  succ Arm64InsCrc32cb = Arm64InsCrc32ch
  succ Arm64InsCrc32ch = Arm64InsCrc32cw
  succ Arm64InsCrc32cw = Arm64InsCrc32cx
  succ Arm64InsCrc32cx = Arm64InsCrc32h
  succ Arm64InsCrc32h = Arm64InsCrc32w
  succ Arm64InsCrc32w = Arm64InsCrc32x
  succ Arm64InsCrc32x = Arm64InsCsel
  succ Arm64InsCsel = Arm64InsCsinc
  succ Arm64InsCsinc = Arm64InsCsinv
  succ Arm64InsCsinv = Arm64InsCsneg
  succ Arm64InsCsneg = Arm64InsDcps1
  succ Arm64InsDcps1 = Arm64InsDcps2
  succ Arm64InsDcps2 = Arm64InsDcps3
  succ Arm64InsDcps3 = Arm64InsDmb
  succ Arm64InsDmb = Arm64InsDrps
  succ Arm64InsDrps = Arm64InsDsb
  succ Arm64InsDsb = Arm64InsDup
  succ Arm64InsDup = Arm64InsEon
  succ Arm64InsEon = Arm64InsEor
  succ Arm64InsEor = Arm64InsEret
  succ Arm64InsEret = Arm64InsExtr
  succ Arm64InsExtr = Arm64InsExt
  succ Arm64InsExt = Arm64InsFabd
  succ Arm64InsFabd = Arm64InsFabs
  succ Arm64InsFabs = Arm64InsFacge
  succ Arm64InsFacge = Arm64InsFacgt
  succ Arm64InsFacgt = Arm64InsFadd
  succ Arm64InsFadd = Arm64InsFaddp
  succ Arm64InsFaddp = Arm64InsFccmp
  succ Arm64InsFccmp = Arm64InsFccmpe
  succ Arm64InsFccmpe = Arm64InsFcmeq
  succ Arm64InsFcmeq = Arm64InsFcmge
  succ Arm64InsFcmge = Arm64InsFcmgt
  succ Arm64InsFcmgt = Arm64InsFcmle
  succ Arm64InsFcmle = Arm64InsFcmlt
  succ Arm64InsFcmlt = Arm64InsFcmp
  succ Arm64InsFcmp = Arm64InsFcmpe
  succ Arm64InsFcmpe = Arm64InsFcsel
  succ Arm64InsFcsel = Arm64InsFcvtas
  succ Arm64InsFcvtas = Arm64InsFcvtau
  succ Arm64InsFcvtau = Arm64InsFcvt
  succ Arm64InsFcvt = Arm64InsFcvtl
  succ Arm64InsFcvtl = Arm64InsFcvtl2
  succ Arm64InsFcvtl2 = Arm64InsFcvtms
  succ Arm64InsFcvtms = Arm64InsFcvtmu
  succ Arm64InsFcvtmu = Arm64InsFcvtns
  succ Arm64InsFcvtns = Arm64InsFcvtnu
  succ Arm64InsFcvtnu = Arm64InsFcvtn
  succ Arm64InsFcvtn = Arm64InsFcvtn2
  succ Arm64InsFcvtn2 = Arm64InsFcvtps
  succ Arm64InsFcvtps = Arm64InsFcvtpu
  succ Arm64InsFcvtpu = Arm64InsFcvtxn
  succ Arm64InsFcvtxn = Arm64InsFcvtxn2
  succ Arm64InsFcvtxn2 = Arm64InsFcvtzs
  succ Arm64InsFcvtzs = Arm64InsFcvtzu
  succ Arm64InsFcvtzu = Arm64InsFdiv
  succ Arm64InsFdiv = Arm64InsFmadd
  succ Arm64InsFmadd = Arm64InsFmax
  succ Arm64InsFmax = Arm64InsFmaxnm
  succ Arm64InsFmaxnm = Arm64InsFmaxnmp
  succ Arm64InsFmaxnmp = Arm64InsFmaxnmv
  succ Arm64InsFmaxnmv = Arm64InsFmaxp
  succ Arm64InsFmaxp = Arm64InsFmaxv
  succ Arm64InsFmaxv = Arm64InsFmin
  succ Arm64InsFmin = Arm64InsFminnm
  succ Arm64InsFminnm = Arm64InsFminnmp
  succ Arm64InsFminnmp = Arm64InsFminnmv
  succ Arm64InsFminnmv = Arm64InsFminp
  succ Arm64InsFminp = Arm64InsFminv
  succ Arm64InsFminv = Arm64InsFmla
  succ Arm64InsFmla = Arm64InsFmls
  succ Arm64InsFmls = Arm64InsFmov
  succ Arm64InsFmov = Arm64InsFmsub
  succ Arm64InsFmsub = Arm64InsFmul
  succ Arm64InsFmul = Arm64InsFmulx
  succ Arm64InsFmulx = Arm64InsFneg
  succ Arm64InsFneg = Arm64InsFnmadd
  succ Arm64InsFnmadd = Arm64InsFnmsub
  succ Arm64InsFnmsub = Arm64InsFnmul
  succ Arm64InsFnmul = Arm64InsFrecpe
  succ Arm64InsFrecpe = Arm64InsFrecps
  succ Arm64InsFrecps = Arm64InsFrecpx
  succ Arm64InsFrecpx = Arm64InsFrinta
  succ Arm64InsFrinta = Arm64InsFrinti
  succ Arm64InsFrinti = Arm64InsFrintm
  succ Arm64InsFrintm = Arm64InsFrintn
  succ Arm64InsFrintn = Arm64InsFrintp
  succ Arm64InsFrintp = Arm64InsFrintx
  succ Arm64InsFrintx = Arm64InsFrintz
  succ Arm64InsFrintz = Arm64InsFrsqrte
  succ Arm64InsFrsqrte = Arm64InsFrsqrts
  succ Arm64InsFrsqrts = Arm64InsFsqrt
  succ Arm64InsFsqrt = Arm64InsFsub
  succ Arm64InsFsub = Arm64InsHint
  succ Arm64InsHint = Arm64InsHlt
  succ Arm64InsHlt = Arm64InsHvc
  succ Arm64InsHvc = Arm64InsIns
  succ Arm64InsIns = Arm64InsIsb
  succ Arm64InsIsb = Arm64InsLd1
  succ Arm64InsLd1 = Arm64InsLd1r
  succ Arm64InsLd1r = Arm64InsLd2r
  succ Arm64InsLd2r = Arm64InsLd2
  succ Arm64InsLd2 = Arm64InsLd3r
  succ Arm64InsLd3r = Arm64InsLd3
  succ Arm64InsLd3 = Arm64InsLd4
  succ Arm64InsLd4 = Arm64InsLd4r
  succ Arm64InsLd4r = Arm64InsLdarb
  succ Arm64InsLdarb = Arm64InsLdarh
  succ Arm64InsLdarh = Arm64InsLdar
  succ Arm64InsLdar = Arm64InsLdaxp
  succ Arm64InsLdaxp = Arm64InsLdaxrb
  succ Arm64InsLdaxrb = Arm64InsLdaxrh
  succ Arm64InsLdaxrh = Arm64InsLdaxr
  succ Arm64InsLdaxr = Arm64InsLdnp
  succ Arm64InsLdnp = Arm64InsLdp
  succ Arm64InsLdp = Arm64InsLdpsw
  succ Arm64InsLdpsw = Arm64InsLdrb
  succ Arm64InsLdrb = Arm64InsLdr
  succ Arm64InsLdr = Arm64InsLdrh
  succ Arm64InsLdrh = Arm64InsLdrsb
  succ Arm64InsLdrsb = Arm64InsLdrsh
  succ Arm64InsLdrsh = Arm64InsLdrsw
  succ Arm64InsLdrsw = Arm64InsLdtrb
  succ Arm64InsLdtrb = Arm64InsLdtrh
  succ Arm64InsLdtrh = Arm64InsLdtrsb
  succ Arm64InsLdtrsb = Arm64InsLdtrsh
  succ Arm64InsLdtrsh = Arm64InsLdtrsw
  succ Arm64InsLdtrsw = Arm64InsLdtr
  succ Arm64InsLdtr = Arm64InsLdurb
  succ Arm64InsLdurb = Arm64InsLdur
  succ Arm64InsLdur = Arm64InsLdurh
  succ Arm64InsLdurh = Arm64InsLdursb
  succ Arm64InsLdursb = Arm64InsLdursh
  succ Arm64InsLdursh = Arm64InsLdursw
  succ Arm64InsLdursw = Arm64InsLdxp
  succ Arm64InsLdxp = Arm64InsLdxrb
  succ Arm64InsLdxrb = Arm64InsLdxrh
  succ Arm64InsLdxrh = Arm64InsLdxr
  succ Arm64InsLdxr = Arm64InsLsl
  succ Arm64InsLsl = Arm64InsLsr
  succ Arm64InsLsr = Arm64InsMadd
  succ Arm64InsMadd = Arm64InsMla
  succ Arm64InsMla = Arm64InsMls
  succ Arm64InsMls = Arm64InsMovi
  succ Arm64InsMovi = Arm64InsMovk
  succ Arm64InsMovk = Arm64InsMovn
  succ Arm64InsMovn = Arm64InsMovz
  succ Arm64InsMovz = Arm64InsMrs
  succ Arm64InsMrs = Arm64InsMsr
  succ Arm64InsMsr = Arm64InsMsub
  succ Arm64InsMsub = Arm64InsMul
  succ Arm64InsMul = Arm64InsMvni
  succ Arm64InsMvni = Arm64InsNeg
  succ Arm64InsNeg = Arm64InsNot
  succ Arm64InsNot = Arm64InsOrn
  succ Arm64InsOrn = Arm64InsOrr
  succ Arm64InsOrr = Arm64InsPmull2
  succ Arm64InsPmull2 = Arm64InsPmull
  succ Arm64InsPmull = Arm64InsPmul
  succ Arm64InsPmul = Arm64InsPrfm
  succ Arm64InsPrfm = Arm64InsPrfum
  succ Arm64InsPrfum = Arm64InsRaddhn
  succ Arm64InsRaddhn = Arm64InsRaddhn2
  succ Arm64InsRaddhn2 = Arm64InsRbit
  succ Arm64InsRbit = Arm64InsRet
  succ Arm64InsRet = Arm64InsRev16
  succ Arm64InsRev16 = Arm64InsRev32
  succ Arm64InsRev32 = Arm64InsRev64
  succ Arm64InsRev64 = Arm64InsRev
  succ Arm64InsRev = Arm64InsRor
  succ Arm64InsRor = Arm64InsRshrn2
  succ Arm64InsRshrn2 = Arm64InsRshrn
  succ Arm64InsRshrn = Arm64InsRsubhn
  succ Arm64InsRsubhn = Arm64InsRsubhn2
  succ Arm64InsRsubhn2 = Arm64InsSabal2
  succ Arm64InsSabal2 = Arm64InsSabal
  succ Arm64InsSabal = Arm64InsSaba
  succ Arm64InsSaba = Arm64InsSabdl2
  succ Arm64InsSabdl2 = Arm64InsSabdl
  succ Arm64InsSabdl = Arm64InsSabd
  succ Arm64InsSabd = Arm64InsSadalp
  succ Arm64InsSadalp = Arm64InsSaddlp
  succ Arm64InsSaddlp = Arm64InsSaddlv
  succ Arm64InsSaddlv = Arm64InsSaddl2
  succ Arm64InsSaddl2 = Arm64InsSaddl
  succ Arm64InsSaddl = Arm64InsSaddw2
  succ Arm64InsSaddw2 = Arm64InsSaddw
  succ Arm64InsSaddw = Arm64InsSbc
  succ Arm64InsSbc = Arm64InsSbfm
  succ Arm64InsSbfm = Arm64InsScvtf
  succ Arm64InsScvtf = Arm64InsSdiv
  succ Arm64InsSdiv = Arm64InsSha1c
  succ Arm64InsSha1c = Arm64InsSha1h
  succ Arm64InsSha1h = Arm64InsSha1m
  succ Arm64InsSha1m = Arm64InsSha1p
  succ Arm64InsSha1p = Arm64InsSha1su0
  succ Arm64InsSha1su0 = Arm64InsSha1su1
  succ Arm64InsSha1su1 = Arm64InsSha256h2
  succ Arm64InsSha256h2 = Arm64InsSha256h
  succ Arm64InsSha256h = Arm64InsSha256su0
  succ Arm64InsSha256su0 = Arm64InsSha256su1
  succ Arm64InsSha256su1 = Arm64InsShadd
  succ Arm64InsShadd = Arm64InsShll2
  succ Arm64InsShll2 = Arm64InsShll
  succ Arm64InsShll = Arm64InsShl
  succ Arm64InsShl = Arm64InsShrn2
  succ Arm64InsShrn2 = Arm64InsShrn
  succ Arm64InsShrn = Arm64InsShsub
  succ Arm64InsShsub = Arm64InsSli
  succ Arm64InsSli = Arm64InsSmaddl
  succ Arm64InsSmaddl = Arm64InsSmaxp
  succ Arm64InsSmaxp = Arm64InsSmaxv
  succ Arm64InsSmaxv = Arm64InsSmax
  succ Arm64InsSmax = Arm64InsSmc
  succ Arm64InsSmc = Arm64InsSminp
  succ Arm64InsSminp = Arm64InsSminv
  succ Arm64InsSminv = Arm64InsSmin
  succ Arm64InsSmin = Arm64InsSmlal2
  succ Arm64InsSmlal2 = Arm64InsSmlal
  succ Arm64InsSmlal = Arm64InsSmlsl2
  succ Arm64InsSmlsl2 = Arm64InsSmlsl
  succ Arm64InsSmlsl = Arm64InsSmov
  succ Arm64InsSmov = Arm64InsSmsubl
  succ Arm64InsSmsubl = Arm64InsSmulh
  succ Arm64InsSmulh = Arm64InsSmull2
  succ Arm64InsSmull2 = Arm64InsSmull
  succ Arm64InsSmull = Arm64InsSqabs
  succ Arm64InsSqabs = Arm64InsSqadd
  succ Arm64InsSqadd = Arm64InsSqdmlal
  succ Arm64InsSqdmlal = Arm64InsSqdmlal2
  succ Arm64InsSqdmlal2 = Arm64InsSqdmlsl
  succ Arm64InsSqdmlsl = Arm64InsSqdmlsl2
  succ Arm64InsSqdmlsl2 = Arm64InsSqdmulh
  succ Arm64InsSqdmulh = Arm64InsSqdmull
  succ Arm64InsSqdmull = Arm64InsSqdmull2
  succ Arm64InsSqdmull2 = Arm64InsSqneg
  succ Arm64InsSqneg = Arm64InsSqrdmulh
  succ Arm64InsSqrdmulh = Arm64InsSqrshl
  succ Arm64InsSqrshl = Arm64InsSqrshrn
  succ Arm64InsSqrshrn = Arm64InsSqrshrn2
  succ Arm64InsSqrshrn2 = Arm64InsSqrshrun
  succ Arm64InsSqrshrun = Arm64InsSqrshrun2
  succ Arm64InsSqrshrun2 = Arm64InsSqshlu
  succ Arm64InsSqshlu = Arm64InsSqshl
  succ Arm64InsSqshl = Arm64InsSqshrn
  succ Arm64InsSqshrn = Arm64InsSqshrn2
  succ Arm64InsSqshrn2 = Arm64InsSqshrun
  succ Arm64InsSqshrun = Arm64InsSqshrun2
  succ Arm64InsSqshrun2 = Arm64InsSqsub
  succ Arm64InsSqsub = Arm64InsSqxtn2
  succ Arm64InsSqxtn2 = Arm64InsSqxtn
  succ Arm64InsSqxtn = Arm64InsSqxtun2
  succ Arm64InsSqxtun2 = Arm64InsSqxtun
  succ Arm64InsSqxtun = Arm64InsSrhadd
  succ Arm64InsSrhadd = Arm64InsSri
  succ Arm64InsSri = Arm64InsSrshl
  succ Arm64InsSrshl = Arm64InsSrshr
  succ Arm64InsSrshr = Arm64InsSrsra
  succ Arm64InsSrsra = Arm64InsSshll2
  succ Arm64InsSshll2 = Arm64InsSshll
  succ Arm64InsSshll = Arm64InsSshl
  succ Arm64InsSshl = Arm64InsSshr
  succ Arm64InsSshr = Arm64InsSsra
  succ Arm64InsSsra = Arm64InsSsubl2
  succ Arm64InsSsubl2 = Arm64InsSsubl
  succ Arm64InsSsubl = Arm64InsSsubw2
  succ Arm64InsSsubw2 = Arm64InsSsubw
  succ Arm64InsSsubw = Arm64InsSt1
  succ Arm64InsSt1 = Arm64InsSt2
  succ Arm64InsSt2 = Arm64InsSt3
  succ Arm64InsSt3 = Arm64InsSt4
  succ Arm64InsSt4 = Arm64InsStlrb
  succ Arm64InsStlrb = Arm64InsStlrh
  succ Arm64InsStlrh = Arm64InsStlr
  succ Arm64InsStlr = Arm64InsStlxp
  succ Arm64InsStlxp = Arm64InsStlxrb
  succ Arm64InsStlxrb = Arm64InsStlxrh
  succ Arm64InsStlxrh = Arm64InsStlxr
  succ Arm64InsStlxr = Arm64InsStnp
  succ Arm64InsStnp = Arm64InsStp
  succ Arm64InsStp = Arm64InsStrb
  succ Arm64InsStrb = Arm64InsStr
  succ Arm64InsStr = Arm64InsStrh
  succ Arm64InsStrh = Arm64InsSttrb
  succ Arm64InsSttrb = Arm64InsSttrh
  succ Arm64InsSttrh = Arm64InsSttr
  succ Arm64InsSttr = Arm64InsSturb
  succ Arm64InsSturb = Arm64InsStur
  succ Arm64InsStur = Arm64InsSturh
  succ Arm64InsSturh = Arm64InsStxp
  succ Arm64InsStxp = Arm64InsStxrb
  succ Arm64InsStxrb = Arm64InsStxrh
  succ Arm64InsStxrh = Arm64InsStxr
  succ Arm64InsStxr = Arm64InsSubhn
  succ Arm64InsSubhn = Arm64InsSubhn2
  succ Arm64InsSubhn2 = Arm64InsSub
  succ Arm64InsSub = Arm64InsSuqadd
  succ Arm64InsSuqadd = Arm64InsSvc
  succ Arm64InsSvc = Arm64InsSysl
  succ Arm64InsSysl = Arm64InsSys
  succ Arm64InsSys = Arm64InsTbl
  succ Arm64InsTbl = Arm64InsTbnz
  succ Arm64InsTbnz = Arm64InsTbx
  succ Arm64InsTbx = Arm64InsTbz
  succ Arm64InsTbz = Arm64InsTrn1
  succ Arm64InsTrn1 = Arm64InsTrn2
  succ Arm64InsTrn2 = Arm64InsUabal2
  succ Arm64InsUabal2 = Arm64InsUabal
  succ Arm64InsUabal = Arm64InsUaba
  succ Arm64InsUaba = Arm64InsUabdl2
  succ Arm64InsUabdl2 = Arm64InsUabdl
  succ Arm64InsUabdl = Arm64InsUabd
  succ Arm64InsUabd = Arm64InsUadalp
  succ Arm64InsUadalp = Arm64InsUaddlp
  succ Arm64InsUaddlp = Arm64InsUaddlv
  succ Arm64InsUaddlv = Arm64InsUaddl2
  succ Arm64InsUaddl2 = Arm64InsUaddl
  succ Arm64InsUaddl = Arm64InsUaddw2
  succ Arm64InsUaddw2 = Arm64InsUaddw
  succ Arm64InsUaddw = Arm64InsUbfm
  succ Arm64InsUbfm = Arm64InsUcvtf
  succ Arm64InsUcvtf = Arm64InsUdiv
  succ Arm64InsUdiv = Arm64InsUhadd
  succ Arm64InsUhadd = Arm64InsUhsub
  succ Arm64InsUhsub = Arm64InsUmaddl
  succ Arm64InsUmaddl = Arm64InsUmaxp
  succ Arm64InsUmaxp = Arm64InsUmaxv
  succ Arm64InsUmaxv = Arm64InsUmax
  succ Arm64InsUmax = Arm64InsUminp
  succ Arm64InsUminp = Arm64InsUminv
  succ Arm64InsUminv = Arm64InsUmin
  succ Arm64InsUmin = Arm64InsUmlal2
  succ Arm64InsUmlal2 = Arm64InsUmlal
  succ Arm64InsUmlal = Arm64InsUmlsl2
  succ Arm64InsUmlsl2 = Arm64InsUmlsl
  succ Arm64InsUmlsl = Arm64InsUmov
  succ Arm64InsUmov = Arm64InsUmsubl
  succ Arm64InsUmsubl = Arm64InsUmulh
  succ Arm64InsUmulh = Arm64InsUmull2
  succ Arm64InsUmull2 = Arm64InsUmull
  succ Arm64InsUmull = Arm64InsUqadd
  succ Arm64InsUqadd = Arm64InsUqrshl
  succ Arm64InsUqrshl = Arm64InsUqrshrn
  succ Arm64InsUqrshrn = Arm64InsUqrshrn2
  succ Arm64InsUqrshrn2 = Arm64InsUqshl
  succ Arm64InsUqshl = Arm64InsUqshrn
  succ Arm64InsUqshrn = Arm64InsUqshrn2
  succ Arm64InsUqshrn2 = Arm64InsUqsub
  succ Arm64InsUqsub = Arm64InsUqxtn2
  succ Arm64InsUqxtn2 = Arm64InsUqxtn
  succ Arm64InsUqxtn = Arm64InsUrecpe
  succ Arm64InsUrecpe = Arm64InsUrhadd
  succ Arm64InsUrhadd = Arm64InsUrshl
  succ Arm64InsUrshl = Arm64InsUrshr
  succ Arm64InsUrshr = Arm64InsUrsqrte
  succ Arm64InsUrsqrte = Arm64InsUrsra
  succ Arm64InsUrsra = Arm64InsUshll2
  succ Arm64InsUshll2 = Arm64InsUshll
  succ Arm64InsUshll = Arm64InsUshl
  succ Arm64InsUshl = Arm64InsUshr
  succ Arm64InsUshr = Arm64InsUsqadd
  succ Arm64InsUsqadd = Arm64InsUsra
  succ Arm64InsUsra = Arm64InsUsubl2
  succ Arm64InsUsubl2 = Arm64InsUsubl
  succ Arm64InsUsubl = Arm64InsUsubw2
  succ Arm64InsUsubw2 = Arm64InsUsubw
  succ Arm64InsUsubw = Arm64InsUzp1
  succ Arm64InsUzp1 = Arm64InsUzp2
  succ Arm64InsUzp2 = Arm64InsXtn2
  succ Arm64InsXtn2 = Arm64InsXtn
  succ Arm64InsXtn = Arm64InsZip1
  succ Arm64InsZip1 = Arm64InsZip2
  succ Arm64InsZip2 = Arm64InsMneg
  succ Arm64InsMneg = Arm64InsUmnegl
  succ Arm64InsUmnegl = Arm64InsSmnegl
  succ Arm64InsSmnegl = Arm64InsNop
  succ Arm64InsNop = Arm64InsYield
  succ Arm64InsYield = Arm64InsWfe
  succ Arm64InsWfe = Arm64InsWfi
  succ Arm64InsWfi = Arm64InsSev
  succ Arm64InsSev = Arm64InsSevl
  succ Arm64InsSevl = Arm64InsNgc
  succ Arm64InsNgc = Arm64InsSbfiz
  succ Arm64InsSbfiz = Arm64InsUbfiz
  succ Arm64InsUbfiz = Arm64InsSbfx
  succ Arm64InsSbfx = Arm64InsUbfx
  succ Arm64InsUbfx = Arm64InsBfi
  succ Arm64InsBfi = Arm64InsBfxil
  succ Arm64InsBfxil = Arm64InsCmn
  succ Arm64InsCmn = Arm64InsMvn
  succ Arm64InsMvn = Arm64InsTst
  succ Arm64InsTst = Arm64InsCset
  succ Arm64InsCset = Arm64InsCinc
  succ Arm64InsCinc = Arm64InsCsetm
  succ Arm64InsCsetm = Arm64InsCinv
  succ Arm64InsCinv = Arm64InsCneg
  succ Arm64InsCneg = Arm64InsSxtb
  succ Arm64InsSxtb = Arm64InsSxth
  succ Arm64InsSxth = Arm64InsSxtw
  succ Arm64InsSxtw = Arm64InsCmp
  succ Arm64InsCmp = Arm64InsUxtb
  succ Arm64InsUxtb = Arm64InsUxth
  succ Arm64InsUxth = Arm64InsUxtw
  succ Arm64InsUxtw = Arm64InsIc
  succ Arm64InsIc = Arm64InsDc
  succ Arm64InsDc = Arm64InsAt
  succ Arm64InsAt = Arm64InsTlbi
  succ Arm64InsTlbi = Arm64InsEnding
  succ Arm64InsEnding = error "Arm64Insn.succ: Arm64InsEnding has no successor"

  pred Arm64InsAbs = Arm64InsInvalid
  pred Arm64InsAdc = Arm64InsAbs
  pred Arm64InsAddhn = Arm64InsAdc
  pred Arm64InsAddhn2 = Arm64InsAddhn
  pred Arm64InsAddp = Arm64InsAddhn2
  pred Arm64InsAdd = Arm64InsAddp
  pred Arm64InsAddv = Arm64InsAdd
  pred Arm64InsAdr = Arm64InsAddv
  pred Arm64InsAdrp = Arm64InsAdr
  pred Arm64InsAesd = Arm64InsAdrp
  pred Arm64InsAese = Arm64InsAesd
  pred Arm64InsAesimc = Arm64InsAese
  pred Arm64InsAesmc = Arm64InsAesimc
  pred Arm64InsAnd = Arm64InsAesmc
  pred Arm64InsAsr = Arm64InsAnd
  pred Arm64InsB = Arm64InsAsr
  pred Arm64InsBfm = Arm64InsB
  pred Arm64InsBic = Arm64InsBfm
  pred Arm64InsBif = Arm64InsBic
  pred Arm64InsBit = Arm64InsBif
  pred Arm64InsBl = Arm64InsBit
  pred Arm64InsBlr = Arm64InsBl
  pred Arm64InsBr = Arm64InsBlr
  pred Arm64InsBrk = Arm64InsBr
  pred Arm64InsBsl = Arm64InsBrk
  pred Arm64InsCbnz = Arm64InsBsl
  pred Arm64InsCbz = Arm64InsCbnz
  pred Arm64InsCcmn = Arm64InsCbz
  pred Arm64InsCcmp = Arm64InsCcmn
  pred Arm64InsClrex = Arm64InsCcmp
  pred Arm64InsCls = Arm64InsClrex
  pred Arm64InsClz = Arm64InsCls
  pred Arm64InsCmeq = Arm64InsClz
  pred Arm64InsCmge = Arm64InsCmeq
  pred Arm64InsCmgt = Arm64InsCmge
  pred Arm64InsCmhi = Arm64InsCmgt
  pred Arm64InsCmhs = Arm64InsCmhi
  pred Arm64InsCmle = Arm64InsCmhs
  pred Arm64InsCmlt = Arm64InsCmle
  pred Arm64InsCmtst = Arm64InsCmlt
  pred Arm64InsCnt = Arm64InsCmtst
  pred Arm64InsMov = Arm64InsCnt
  pred Arm64InsCrc32b = Arm64InsMov
  pred Arm64InsCrc32cb = Arm64InsCrc32b
  pred Arm64InsCrc32ch = Arm64InsCrc32cb
  pred Arm64InsCrc32cw = Arm64InsCrc32ch
  pred Arm64InsCrc32cx = Arm64InsCrc32cw
  pred Arm64InsCrc32h = Arm64InsCrc32cx
  pred Arm64InsCrc32w = Arm64InsCrc32h
  pred Arm64InsCrc32x = Arm64InsCrc32w
  pred Arm64InsCsel = Arm64InsCrc32x
  pred Arm64InsCsinc = Arm64InsCsel
  pred Arm64InsCsinv = Arm64InsCsinc
  pred Arm64InsCsneg = Arm64InsCsinv
  pred Arm64InsDcps1 = Arm64InsCsneg
  pred Arm64InsDcps2 = Arm64InsDcps1
  pred Arm64InsDcps3 = Arm64InsDcps2
  pred Arm64InsDmb = Arm64InsDcps3
  pred Arm64InsDrps = Arm64InsDmb
  pred Arm64InsDsb = Arm64InsDrps
  pred Arm64InsDup = Arm64InsDsb
  pred Arm64InsEon = Arm64InsDup
  pred Arm64InsEor = Arm64InsEon
  pred Arm64InsEret = Arm64InsEor
  pred Arm64InsExtr = Arm64InsEret
  pred Arm64InsExt = Arm64InsExtr
  pred Arm64InsFabd = Arm64InsExt
  pred Arm64InsFabs = Arm64InsFabd
  pred Arm64InsFacge = Arm64InsFabs
  pred Arm64InsFacgt = Arm64InsFacge
  pred Arm64InsFadd = Arm64InsFacgt
  pred Arm64InsFaddp = Arm64InsFadd
  pred Arm64InsFccmp = Arm64InsFaddp
  pred Arm64InsFccmpe = Arm64InsFccmp
  pred Arm64InsFcmeq = Arm64InsFccmpe
  pred Arm64InsFcmge = Arm64InsFcmeq
  pred Arm64InsFcmgt = Arm64InsFcmge
  pred Arm64InsFcmle = Arm64InsFcmgt
  pred Arm64InsFcmlt = Arm64InsFcmle
  pred Arm64InsFcmp = Arm64InsFcmlt
  pred Arm64InsFcmpe = Arm64InsFcmp
  pred Arm64InsFcsel = Arm64InsFcmpe
  pred Arm64InsFcvtas = Arm64InsFcsel
  pred Arm64InsFcvtau = Arm64InsFcvtas
  pred Arm64InsFcvt = Arm64InsFcvtau
  pred Arm64InsFcvtl = Arm64InsFcvt
  pred Arm64InsFcvtl2 = Arm64InsFcvtl
  pred Arm64InsFcvtms = Arm64InsFcvtl2
  pred Arm64InsFcvtmu = Arm64InsFcvtms
  pred Arm64InsFcvtns = Arm64InsFcvtmu
  pred Arm64InsFcvtnu = Arm64InsFcvtns
  pred Arm64InsFcvtn = Arm64InsFcvtnu
  pred Arm64InsFcvtn2 = Arm64InsFcvtn
  pred Arm64InsFcvtps = Arm64InsFcvtn2
  pred Arm64InsFcvtpu = Arm64InsFcvtps
  pred Arm64InsFcvtxn = Arm64InsFcvtpu
  pred Arm64InsFcvtxn2 = Arm64InsFcvtxn
  pred Arm64InsFcvtzs = Arm64InsFcvtxn2
  pred Arm64InsFcvtzu = Arm64InsFcvtzs
  pred Arm64InsFdiv = Arm64InsFcvtzu
  pred Arm64InsFmadd = Arm64InsFdiv
  pred Arm64InsFmax = Arm64InsFmadd
  pred Arm64InsFmaxnm = Arm64InsFmax
  pred Arm64InsFmaxnmp = Arm64InsFmaxnm
  pred Arm64InsFmaxnmv = Arm64InsFmaxnmp
  pred Arm64InsFmaxp = Arm64InsFmaxnmv
  pred Arm64InsFmaxv = Arm64InsFmaxp
  pred Arm64InsFmin = Arm64InsFmaxv
  pred Arm64InsFminnm = Arm64InsFmin
  pred Arm64InsFminnmp = Arm64InsFminnm
  pred Arm64InsFminnmv = Arm64InsFminnmp
  pred Arm64InsFminp = Arm64InsFminnmv
  pred Arm64InsFminv = Arm64InsFminp
  pred Arm64InsFmla = Arm64InsFminv
  pred Arm64InsFmls = Arm64InsFmla
  pred Arm64InsFmov = Arm64InsFmls
  pred Arm64InsFmsub = Arm64InsFmov
  pred Arm64InsFmul = Arm64InsFmsub
  pred Arm64InsFmulx = Arm64InsFmul
  pred Arm64InsFneg = Arm64InsFmulx
  pred Arm64InsFnmadd = Arm64InsFneg
  pred Arm64InsFnmsub = Arm64InsFnmadd
  pred Arm64InsFnmul = Arm64InsFnmsub
  pred Arm64InsFrecpe = Arm64InsFnmul
  pred Arm64InsFrecps = Arm64InsFrecpe
  pred Arm64InsFrecpx = Arm64InsFrecps
  pred Arm64InsFrinta = Arm64InsFrecpx
  pred Arm64InsFrinti = Arm64InsFrinta
  pred Arm64InsFrintm = Arm64InsFrinti
  pred Arm64InsFrintn = Arm64InsFrintm
  pred Arm64InsFrintp = Arm64InsFrintn
  pred Arm64InsFrintx = Arm64InsFrintp
  pred Arm64InsFrintz = Arm64InsFrintx
  pred Arm64InsFrsqrte = Arm64InsFrintz
  pred Arm64InsFrsqrts = Arm64InsFrsqrte
  pred Arm64InsFsqrt = Arm64InsFrsqrts
  pred Arm64InsFsub = Arm64InsFsqrt
  pred Arm64InsHint = Arm64InsFsub
  pred Arm64InsHlt = Arm64InsHint
  pred Arm64InsHvc = Arm64InsHlt
  pred Arm64InsIns = Arm64InsHvc
  pred Arm64InsIsb = Arm64InsIns
  pred Arm64InsLd1 = Arm64InsIsb
  pred Arm64InsLd1r = Arm64InsLd1
  pred Arm64InsLd2r = Arm64InsLd1r
  pred Arm64InsLd2 = Arm64InsLd2r
  pred Arm64InsLd3r = Arm64InsLd2
  pred Arm64InsLd3 = Arm64InsLd3r
  pred Arm64InsLd4 = Arm64InsLd3
  pred Arm64InsLd4r = Arm64InsLd4
  pred Arm64InsLdarb = Arm64InsLd4r
  pred Arm64InsLdarh = Arm64InsLdarb
  pred Arm64InsLdar = Arm64InsLdarh
  pred Arm64InsLdaxp = Arm64InsLdar
  pred Arm64InsLdaxrb = Arm64InsLdaxp
  pred Arm64InsLdaxrh = Arm64InsLdaxrb
  pred Arm64InsLdaxr = Arm64InsLdaxrh
  pred Arm64InsLdnp = Arm64InsLdaxr
  pred Arm64InsLdp = Arm64InsLdnp
  pred Arm64InsLdpsw = Arm64InsLdp
  pred Arm64InsLdrb = Arm64InsLdpsw
  pred Arm64InsLdr = Arm64InsLdrb
  pred Arm64InsLdrh = Arm64InsLdr
  pred Arm64InsLdrsb = Arm64InsLdrh
  pred Arm64InsLdrsh = Arm64InsLdrsb
  pred Arm64InsLdrsw = Arm64InsLdrsh
  pred Arm64InsLdtrb = Arm64InsLdrsw
  pred Arm64InsLdtrh = Arm64InsLdtrb
  pred Arm64InsLdtrsb = Arm64InsLdtrh
  pred Arm64InsLdtrsh = Arm64InsLdtrsb
  pred Arm64InsLdtrsw = Arm64InsLdtrsh
  pred Arm64InsLdtr = Arm64InsLdtrsw
  pred Arm64InsLdurb = Arm64InsLdtr
  pred Arm64InsLdur = Arm64InsLdurb
  pred Arm64InsLdurh = Arm64InsLdur
  pred Arm64InsLdursb = Arm64InsLdurh
  pred Arm64InsLdursh = Arm64InsLdursb
  pred Arm64InsLdursw = Arm64InsLdursh
  pred Arm64InsLdxp = Arm64InsLdursw
  pred Arm64InsLdxrb = Arm64InsLdxp
  pred Arm64InsLdxrh = Arm64InsLdxrb
  pred Arm64InsLdxr = Arm64InsLdxrh
  pred Arm64InsLsl = Arm64InsLdxr
  pred Arm64InsLsr = Arm64InsLsl
  pred Arm64InsMadd = Arm64InsLsr
  pred Arm64InsMla = Arm64InsMadd
  pred Arm64InsMls = Arm64InsMla
  pred Arm64InsMovi = Arm64InsMls
  pred Arm64InsMovk = Arm64InsMovi
  pred Arm64InsMovn = Arm64InsMovk
  pred Arm64InsMovz = Arm64InsMovn
  pred Arm64InsMrs = Arm64InsMovz
  pred Arm64InsMsr = Arm64InsMrs
  pred Arm64InsMsub = Arm64InsMsr
  pred Arm64InsMul = Arm64InsMsub
  pred Arm64InsMvni = Arm64InsMul
  pred Arm64InsNeg = Arm64InsMvni
  pred Arm64InsNot = Arm64InsNeg
  pred Arm64InsOrn = Arm64InsNot
  pred Arm64InsOrr = Arm64InsOrn
  pred Arm64InsPmull2 = Arm64InsOrr
  pred Arm64InsPmull = Arm64InsPmull2
  pred Arm64InsPmul = Arm64InsPmull
  pred Arm64InsPrfm = Arm64InsPmul
  pred Arm64InsPrfum = Arm64InsPrfm
  pred Arm64InsRaddhn = Arm64InsPrfum
  pred Arm64InsRaddhn2 = Arm64InsRaddhn
  pred Arm64InsRbit = Arm64InsRaddhn2
  pred Arm64InsRet = Arm64InsRbit
  pred Arm64InsRev16 = Arm64InsRet
  pred Arm64InsRev32 = Arm64InsRev16
  pred Arm64InsRev64 = Arm64InsRev32
  pred Arm64InsRev = Arm64InsRev64
  pred Arm64InsRor = Arm64InsRev
  pred Arm64InsRshrn2 = Arm64InsRor
  pred Arm64InsRshrn = Arm64InsRshrn2
  pred Arm64InsRsubhn = Arm64InsRshrn
  pred Arm64InsRsubhn2 = Arm64InsRsubhn
  pred Arm64InsSabal2 = Arm64InsRsubhn2
  pred Arm64InsSabal = Arm64InsSabal2
  pred Arm64InsSaba = Arm64InsSabal
  pred Arm64InsSabdl2 = Arm64InsSaba
  pred Arm64InsSabdl = Arm64InsSabdl2
  pred Arm64InsSabd = Arm64InsSabdl
  pred Arm64InsSadalp = Arm64InsSabd
  pred Arm64InsSaddlp = Arm64InsSadalp
  pred Arm64InsSaddlv = Arm64InsSaddlp
  pred Arm64InsSaddl2 = Arm64InsSaddlv
  pred Arm64InsSaddl = Arm64InsSaddl2
  pred Arm64InsSaddw2 = Arm64InsSaddl
  pred Arm64InsSaddw = Arm64InsSaddw2
  pred Arm64InsSbc = Arm64InsSaddw
  pred Arm64InsSbfm = Arm64InsSbc
  pred Arm64InsScvtf = Arm64InsSbfm
  pred Arm64InsSdiv = Arm64InsScvtf
  pred Arm64InsSha1c = Arm64InsSdiv
  pred Arm64InsSha1h = Arm64InsSha1c
  pred Arm64InsSha1m = Arm64InsSha1h
  pred Arm64InsSha1p = Arm64InsSha1m
  pred Arm64InsSha1su0 = Arm64InsSha1p
  pred Arm64InsSha1su1 = Arm64InsSha1su0
  pred Arm64InsSha256h2 = Arm64InsSha1su1
  pred Arm64InsSha256h = Arm64InsSha256h2
  pred Arm64InsSha256su0 = Arm64InsSha256h
  pred Arm64InsSha256su1 = Arm64InsSha256su0
  pred Arm64InsShadd = Arm64InsSha256su1
  pred Arm64InsShll2 = Arm64InsShadd
  pred Arm64InsShll = Arm64InsShll2
  pred Arm64InsShl = Arm64InsShll
  pred Arm64InsShrn2 = Arm64InsShl
  pred Arm64InsShrn = Arm64InsShrn2
  pred Arm64InsShsub = Arm64InsShrn
  pred Arm64InsSli = Arm64InsShsub
  pred Arm64InsSmaddl = Arm64InsSli
  pred Arm64InsSmaxp = Arm64InsSmaddl
  pred Arm64InsSmaxv = Arm64InsSmaxp
  pred Arm64InsSmax = Arm64InsSmaxv
  pred Arm64InsSmc = Arm64InsSmax
  pred Arm64InsSminp = Arm64InsSmc
  pred Arm64InsSminv = Arm64InsSminp
  pred Arm64InsSmin = Arm64InsSminv
  pred Arm64InsSmlal2 = Arm64InsSmin
  pred Arm64InsSmlal = Arm64InsSmlal2
  pred Arm64InsSmlsl2 = Arm64InsSmlal
  pred Arm64InsSmlsl = Arm64InsSmlsl2
  pred Arm64InsSmov = Arm64InsSmlsl
  pred Arm64InsSmsubl = Arm64InsSmov
  pred Arm64InsSmulh = Arm64InsSmsubl
  pred Arm64InsSmull2 = Arm64InsSmulh
  pred Arm64InsSmull = Arm64InsSmull2
  pred Arm64InsSqabs = Arm64InsSmull
  pred Arm64InsSqadd = Arm64InsSqabs
  pred Arm64InsSqdmlal = Arm64InsSqadd
  pred Arm64InsSqdmlal2 = Arm64InsSqdmlal
  pred Arm64InsSqdmlsl = Arm64InsSqdmlal2
  pred Arm64InsSqdmlsl2 = Arm64InsSqdmlsl
  pred Arm64InsSqdmulh = Arm64InsSqdmlsl2
  pred Arm64InsSqdmull = Arm64InsSqdmulh
  pred Arm64InsSqdmull2 = Arm64InsSqdmull
  pred Arm64InsSqneg = Arm64InsSqdmull2
  pred Arm64InsSqrdmulh = Arm64InsSqneg
  pred Arm64InsSqrshl = Arm64InsSqrdmulh
  pred Arm64InsSqrshrn = Arm64InsSqrshl
  pred Arm64InsSqrshrn2 = Arm64InsSqrshrn
  pred Arm64InsSqrshrun = Arm64InsSqrshrn2
  pred Arm64InsSqrshrun2 = Arm64InsSqrshrun
  pred Arm64InsSqshlu = Arm64InsSqrshrun2
  pred Arm64InsSqshl = Arm64InsSqshlu
  pred Arm64InsSqshrn = Arm64InsSqshl
  pred Arm64InsSqshrn2 = Arm64InsSqshrn
  pred Arm64InsSqshrun = Arm64InsSqshrn2
  pred Arm64InsSqshrun2 = Arm64InsSqshrun
  pred Arm64InsSqsub = Arm64InsSqshrun2
  pred Arm64InsSqxtn2 = Arm64InsSqsub
  pred Arm64InsSqxtn = Arm64InsSqxtn2
  pred Arm64InsSqxtun2 = Arm64InsSqxtn
  pred Arm64InsSqxtun = Arm64InsSqxtun2
  pred Arm64InsSrhadd = Arm64InsSqxtun
  pred Arm64InsSri = Arm64InsSrhadd
  pred Arm64InsSrshl = Arm64InsSri
  pred Arm64InsSrshr = Arm64InsSrshl
  pred Arm64InsSrsra = Arm64InsSrshr
  pred Arm64InsSshll2 = Arm64InsSrsra
  pred Arm64InsSshll = Arm64InsSshll2
  pred Arm64InsSshl = Arm64InsSshll
  pred Arm64InsSshr = Arm64InsSshl
  pred Arm64InsSsra = Arm64InsSshr
  pred Arm64InsSsubl2 = Arm64InsSsra
  pred Arm64InsSsubl = Arm64InsSsubl2
  pred Arm64InsSsubw2 = Arm64InsSsubl
  pred Arm64InsSsubw = Arm64InsSsubw2
  pred Arm64InsSt1 = Arm64InsSsubw
  pred Arm64InsSt2 = Arm64InsSt1
  pred Arm64InsSt3 = Arm64InsSt2
  pred Arm64InsSt4 = Arm64InsSt3
  pred Arm64InsStlrb = Arm64InsSt4
  pred Arm64InsStlrh = Arm64InsStlrb
  pred Arm64InsStlr = Arm64InsStlrh
  pred Arm64InsStlxp = Arm64InsStlr
  pred Arm64InsStlxrb = Arm64InsStlxp
  pred Arm64InsStlxrh = Arm64InsStlxrb
  pred Arm64InsStlxr = Arm64InsStlxrh
  pred Arm64InsStnp = Arm64InsStlxr
  pred Arm64InsStp = Arm64InsStnp
  pred Arm64InsStrb = Arm64InsStp
  pred Arm64InsStr = Arm64InsStrb
  pred Arm64InsStrh = Arm64InsStr
  pred Arm64InsSttrb = Arm64InsStrh
  pred Arm64InsSttrh = Arm64InsSttrb
  pred Arm64InsSttr = Arm64InsSttrh
  pred Arm64InsSturb = Arm64InsSttr
  pred Arm64InsStur = Arm64InsSturb
  pred Arm64InsSturh = Arm64InsStur
  pred Arm64InsStxp = Arm64InsSturh
  pred Arm64InsStxrb = Arm64InsStxp
  pred Arm64InsStxrh = Arm64InsStxrb
  pred Arm64InsStxr = Arm64InsStxrh
  pred Arm64InsSubhn = Arm64InsStxr
  pred Arm64InsSubhn2 = Arm64InsSubhn
  pred Arm64InsSub = Arm64InsSubhn2
  pred Arm64InsSuqadd = Arm64InsSub
  pred Arm64InsSvc = Arm64InsSuqadd
  pred Arm64InsSysl = Arm64InsSvc
  pred Arm64InsSys = Arm64InsSysl
  pred Arm64InsTbl = Arm64InsSys
  pred Arm64InsTbnz = Arm64InsTbl
  pred Arm64InsTbx = Arm64InsTbnz
  pred Arm64InsTbz = Arm64InsTbx
  pred Arm64InsTrn1 = Arm64InsTbz
  pred Arm64InsTrn2 = Arm64InsTrn1
  pred Arm64InsUabal2 = Arm64InsTrn2
  pred Arm64InsUabal = Arm64InsUabal2
  pred Arm64InsUaba = Arm64InsUabal
  pred Arm64InsUabdl2 = Arm64InsUaba
  pred Arm64InsUabdl = Arm64InsUabdl2
  pred Arm64InsUabd = Arm64InsUabdl
  pred Arm64InsUadalp = Arm64InsUabd
  pred Arm64InsUaddlp = Arm64InsUadalp
  pred Arm64InsUaddlv = Arm64InsUaddlp
  pred Arm64InsUaddl2 = Arm64InsUaddlv
  pred Arm64InsUaddl = Arm64InsUaddl2
  pred Arm64InsUaddw2 = Arm64InsUaddl
  pred Arm64InsUaddw = Arm64InsUaddw2
  pred Arm64InsUbfm = Arm64InsUaddw
  pred Arm64InsUcvtf = Arm64InsUbfm
  pred Arm64InsUdiv = Arm64InsUcvtf
  pred Arm64InsUhadd = Arm64InsUdiv
  pred Arm64InsUhsub = Arm64InsUhadd
  pred Arm64InsUmaddl = Arm64InsUhsub
  pred Arm64InsUmaxp = Arm64InsUmaddl
  pred Arm64InsUmaxv = Arm64InsUmaxp
  pred Arm64InsUmax = Arm64InsUmaxv
  pred Arm64InsUminp = Arm64InsUmax
  pred Arm64InsUminv = Arm64InsUminp
  pred Arm64InsUmin = Arm64InsUminv
  pred Arm64InsUmlal2 = Arm64InsUmin
  pred Arm64InsUmlal = Arm64InsUmlal2
  pred Arm64InsUmlsl2 = Arm64InsUmlal
  pred Arm64InsUmlsl = Arm64InsUmlsl2
  pred Arm64InsUmov = Arm64InsUmlsl
  pred Arm64InsUmsubl = Arm64InsUmov
  pred Arm64InsUmulh = Arm64InsUmsubl
  pred Arm64InsUmull2 = Arm64InsUmulh
  pred Arm64InsUmull = Arm64InsUmull2
  pred Arm64InsUqadd = Arm64InsUmull
  pred Arm64InsUqrshl = Arm64InsUqadd
  pred Arm64InsUqrshrn = Arm64InsUqrshl
  pred Arm64InsUqrshrn2 = Arm64InsUqrshrn
  pred Arm64InsUqshl = Arm64InsUqrshrn2
  pred Arm64InsUqshrn = Arm64InsUqshl
  pred Arm64InsUqshrn2 = Arm64InsUqshrn
  pred Arm64InsUqsub = Arm64InsUqshrn2
  pred Arm64InsUqxtn2 = Arm64InsUqsub
  pred Arm64InsUqxtn = Arm64InsUqxtn2
  pred Arm64InsUrecpe = Arm64InsUqxtn
  pred Arm64InsUrhadd = Arm64InsUrecpe
  pred Arm64InsUrshl = Arm64InsUrhadd
  pred Arm64InsUrshr = Arm64InsUrshl
  pred Arm64InsUrsqrte = Arm64InsUrshr
  pred Arm64InsUrsra = Arm64InsUrsqrte
  pred Arm64InsUshll2 = Arm64InsUrsra
  pred Arm64InsUshll = Arm64InsUshll2
  pred Arm64InsUshl = Arm64InsUshll
  pred Arm64InsUshr = Arm64InsUshl
  pred Arm64InsUsqadd = Arm64InsUshr
  pred Arm64InsUsra = Arm64InsUsqadd
  pred Arm64InsUsubl2 = Arm64InsUsra
  pred Arm64InsUsubl = Arm64InsUsubl2
  pred Arm64InsUsubw2 = Arm64InsUsubl
  pred Arm64InsUsubw = Arm64InsUsubw2
  pred Arm64InsUzp1 = Arm64InsUsubw
  pred Arm64InsUzp2 = Arm64InsUzp1
  pred Arm64InsXtn2 = Arm64InsUzp2
  pred Arm64InsXtn = Arm64InsXtn2
  pred Arm64InsZip1 = Arm64InsXtn
  pred Arm64InsZip2 = Arm64InsZip1
  pred Arm64InsMneg = Arm64InsZip2
  pred Arm64InsUmnegl = Arm64InsMneg
  pred Arm64InsSmnegl = Arm64InsUmnegl
  pred Arm64InsNop = Arm64InsSmnegl
  pred Arm64InsYield = Arm64InsNop
  pred Arm64InsWfe = Arm64InsYield
  pred Arm64InsWfi = Arm64InsWfe
  pred Arm64InsSev = Arm64InsWfi
  pred Arm64InsSevl = Arm64InsSev
  pred Arm64InsNgc = Arm64InsSevl
  pred Arm64InsSbfiz = Arm64InsNgc
  pred Arm64InsUbfiz = Arm64InsSbfiz
  pred Arm64InsSbfx = Arm64InsUbfiz
  pred Arm64InsUbfx = Arm64InsSbfx
  pred Arm64InsBfi = Arm64InsUbfx
  pred Arm64InsBfxil = Arm64InsBfi
  pred Arm64InsCmn = Arm64InsBfxil
  pred Arm64InsMvn = Arm64InsCmn
  pred Arm64InsTst = Arm64InsMvn
  pred Arm64InsCset = Arm64InsTst
  pred Arm64InsCinc = Arm64InsCset
  pred Arm64InsCsetm = Arm64InsCinc
  pred Arm64InsCinv = Arm64InsCsetm
  pred Arm64InsCneg = Arm64InsCinv
  pred Arm64InsSxtb = Arm64InsCneg
  pred Arm64InsSxth = Arm64InsSxtb
  pred Arm64InsSxtw = Arm64InsSxth
  pred Arm64InsCmp = Arm64InsSxtw
  pred Arm64InsUxtb = Arm64InsCmp
  pred Arm64InsUxth = Arm64InsUxtb
  pred Arm64InsUxtw = Arm64InsUxth
  pred Arm64InsIc = Arm64InsUxtw
  pred Arm64InsDc = Arm64InsIc
  pred Arm64InsAt = Arm64InsDc
  pred Arm64InsTlbi = Arm64InsAt
  pred Arm64InsEnding = Arm64InsTlbi
  pred Arm64InsInvalid = error "Arm64Insn.pred: Arm64InsInvalid 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 Arm64InsEnding

  fromEnum Arm64InsInvalid = 0
  fromEnum Arm64InsAbs = 1
  fromEnum Arm64InsAdc = 2
  fromEnum Arm64InsAddhn = 3
  fromEnum Arm64InsAddhn2 = 4
  fromEnum Arm64InsAddp = 5
  fromEnum Arm64InsAdd = 6
  fromEnum Arm64InsAddv = 7
  fromEnum Arm64InsAdr = 8
  fromEnum Arm64InsAdrp = 9
  fromEnum Arm64InsAesd = 10
  fromEnum Arm64InsAese = 11
  fromEnum Arm64InsAesimc = 12
  fromEnum Arm64InsAesmc = 13
  fromEnum Arm64InsAnd = 14
  fromEnum Arm64InsAsr = 15
  fromEnum Arm64InsB = 16
  fromEnum Arm64InsBfm = 17
  fromEnum Arm64InsBic = 18
  fromEnum Arm64InsBif = 19
  fromEnum Arm64InsBit = 20
  fromEnum Arm64InsBl = 21
  fromEnum Arm64InsBlr = 22
  fromEnum Arm64InsBr = 23
  fromEnum Arm64InsBrk = 24
  fromEnum Arm64InsBsl = 25
  fromEnum Arm64InsCbnz = 26
  fromEnum Arm64InsCbz = 27
  fromEnum Arm64InsCcmn = 28
  fromEnum Arm64InsCcmp = 29
  fromEnum Arm64InsClrex = 30
  fromEnum Arm64InsCls = 31
  fromEnum Arm64InsClz = 32
  fromEnum Arm64InsCmeq = 33
  fromEnum Arm64InsCmge = 34
  fromEnum Arm64InsCmgt = 35
  fromEnum Arm64InsCmhi = 36
  fromEnum Arm64InsCmhs = 37
  fromEnum Arm64InsCmle = 38
  fromEnum Arm64InsCmlt = 39
  fromEnum Arm64InsCmtst = 40
  fromEnum Arm64InsCnt = 41
  fromEnum Arm64InsMov = 42
  fromEnum Arm64InsCrc32b = 43
  fromEnum Arm64InsCrc32cb = 44
  fromEnum Arm64InsCrc32ch = 45
  fromEnum Arm64InsCrc32cw = 46
  fromEnum Arm64InsCrc32cx = 47
  fromEnum Arm64InsCrc32h = 48
  fromEnum Arm64InsCrc32w = 49
  fromEnum Arm64InsCrc32x = 50
  fromEnum Arm64InsCsel = 51
  fromEnum Arm64InsCsinc = 52
  fromEnum Arm64InsCsinv = 53
  fromEnum Arm64InsCsneg = 54
  fromEnum Arm64InsDcps1 = 55
  fromEnum Arm64InsDcps2 = 56
  fromEnum Arm64InsDcps3 = 57
  fromEnum Arm64InsDmb = 58
  fromEnum Arm64InsDrps = 59
  fromEnum Arm64InsDsb = 60
  fromEnum Arm64InsDup = 61
  fromEnum Arm64InsEon = 62
  fromEnum Arm64InsEor = 63
  fromEnum Arm64InsEret = 64
  fromEnum Arm64InsExtr = 65
  fromEnum Arm64InsExt = 66
  fromEnum Arm64InsFabd = 67
  fromEnum Arm64InsFabs = 68
  fromEnum Arm64InsFacge = 69
  fromEnum Arm64InsFacgt = 70
  fromEnum Arm64InsFadd = 71
  fromEnum Arm64InsFaddp = 72
  fromEnum Arm64InsFccmp = 73
  fromEnum Arm64InsFccmpe = 74
  fromEnum Arm64InsFcmeq = 75
  fromEnum Arm64InsFcmge = 76
  fromEnum Arm64InsFcmgt = 77
  fromEnum Arm64InsFcmle = 78
  fromEnum Arm64InsFcmlt = 79
  fromEnum Arm64InsFcmp = 80
  fromEnum Arm64InsFcmpe = 81
  fromEnum Arm64InsFcsel = 82
  fromEnum Arm64InsFcvtas = 83
  fromEnum Arm64InsFcvtau = 84
  fromEnum Arm64InsFcvt = 85
  fromEnum Arm64InsFcvtl = 86
  fromEnum Arm64InsFcvtl2 = 87
  fromEnum Arm64InsFcvtms = 88
  fromEnum Arm64InsFcvtmu = 89
  fromEnum Arm64InsFcvtns = 90
  fromEnum Arm64InsFcvtnu = 91
  fromEnum Arm64InsFcvtn = 92
  fromEnum Arm64InsFcvtn2 = 93
  fromEnum Arm64InsFcvtps = 94
  fromEnum Arm64InsFcvtpu = 95
  fromEnum Arm64InsFcvtxn = 96
  fromEnum Arm64InsFcvtxn2 = 97
  fromEnum Arm64InsFcvtzs = 98
  fromEnum Arm64InsFcvtzu = 99
  fromEnum Arm64InsFdiv = 100
  fromEnum Arm64InsFmadd = 101
  fromEnum Arm64InsFmax = 102
  fromEnum Arm64InsFmaxnm = 103
  fromEnum Arm64InsFmaxnmp = 104
  fromEnum Arm64InsFmaxnmv = 105
  fromEnum Arm64InsFmaxp = 106
  fromEnum Arm64InsFmaxv = 107
  fromEnum Arm64InsFmin = 108
  fromEnum Arm64InsFminnm = 109
  fromEnum Arm64InsFminnmp = 110
  fromEnum Arm64InsFminnmv = 111
  fromEnum Arm64InsFminp = 112
  fromEnum Arm64InsFminv = 113
  fromEnum Arm64InsFmla = 114
  fromEnum Arm64InsFmls = 115
  fromEnum Arm64InsFmov = 116
  fromEnum Arm64InsFmsub = 117
  fromEnum Arm64InsFmul = 118
  fromEnum Arm64InsFmulx = 119
  fromEnum Arm64InsFneg = 120
  fromEnum Arm64InsFnmadd = 121
  fromEnum Arm64InsFnmsub = 122
  fromEnum Arm64InsFnmul = 123
  fromEnum Arm64InsFrecpe = 124
  fromEnum Arm64InsFrecps = 125
  fromEnum Arm64InsFrecpx = 126
  fromEnum Arm64InsFrinta = 127
  fromEnum Arm64InsFrinti = 128
  fromEnum Arm64InsFrintm = 129
  fromEnum Arm64InsFrintn = 130
  fromEnum Arm64InsFrintp = 131
  fromEnum Arm64InsFrintx = 132
  fromEnum Arm64InsFrintz = 133
  fromEnum Arm64InsFrsqrte = 134
  fromEnum Arm64InsFrsqrts = 135
  fromEnum Arm64InsFsqrt = 136
  fromEnum Arm64InsFsub = 137
  fromEnum Arm64InsHint = 138
  fromEnum Arm64InsHlt = 139
  fromEnum Arm64InsHvc = 140
  fromEnum Arm64InsIns = 141
  fromEnum Arm64InsIsb = 142
  fromEnum Arm64InsLd1 = 143
  fromEnum Arm64InsLd1r = 144
  fromEnum Arm64InsLd2r = 145
  fromEnum Arm64InsLd2 = 146
  fromEnum Arm64InsLd3r = 147
  fromEnum Arm64InsLd3 = 148
  fromEnum Arm64InsLd4 = 149
  fromEnum Arm64InsLd4r = 150
  fromEnum Arm64InsLdarb = 151
  fromEnum Arm64InsLdarh = 152
  fromEnum Arm64InsLdar = 153
  fromEnum Arm64InsLdaxp = 154
  fromEnum Arm64InsLdaxrb = 155
  fromEnum Arm64InsLdaxrh = 156
  fromEnum Arm64InsLdaxr = 157
  fromEnum Arm64InsLdnp = 158
  fromEnum Arm64InsLdp = 159
  fromEnum Arm64InsLdpsw = 160
  fromEnum Arm64InsLdrb = 161
  fromEnum Arm64InsLdr = 162
  fromEnum Arm64InsLdrh = 163
  fromEnum Arm64InsLdrsb = 164
  fromEnum Arm64InsLdrsh = 165
  fromEnum Arm64InsLdrsw = 166
  fromEnum Arm64InsLdtrb = 167
  fromEnum Arm64InsLdtrh = 168
  fromEnum Arm64InsLdtrsb = 169
  fromEnum Arm64InsLdtrsh = 170
  fromEnum Arm64InsLdtrsw = 171
  fromEnum Arm64InsLdtr = 172
  fromEnum Arm64InsLdurb = 173
  fromEnum Arm64InsLdur = 174
  fromEnum Arm64InsLdurh = 175
  fromEnum Arm64InsLdursb = 176
  fromEnum Arm64InsLdursh = 177
  fromEnum Arm64InsLdursw = 178
  fromEnum Arm64InsLdxp = 179
  fromEnum Arm64InsLdxrb = 180
  fromEnum Arm64InsLdxrh = 181
  fromEnum Arm64InsLdxr = 182
  fromEnum Arm64InsLsl = 183
  fromEnum Arm64InsLsr = 184
  fromEnum Arm64InsMadd = 185
  fromEnum Arm64InsMla = 186
  fromEnum Arm64InsMls = 187
  fromEnum Arm64InsMovi = 188
  fromEnum Arm64InsMovk = 189
  fromEnum Arm64InsMovn = 190
  fromEnum Arm64InsMovz = 191
  fromEnum Arm64InsMrs = 192
  fromEnum Arm64InsMsr = 193
  fromEnum Arm64InsMsub = 194
  fromEnum Arm64InsMul = 195
  fromEnum Arm64InsMvni = 196
  fromEnum Arm64InsNeg = 197
  fromEnum Arm64InsNot = 198
  fromEnum Arm64InsOrn = 199
  fromEnum Arm64InsOrr = 200
  fromEnum Arm64InsPmull2 = 201
  fromEnum Arm64InsPmull = 202
  fromEnum Arm64InsPmul = 203
  fromEnum Arm64InsPrfm = 204
  fromEnum Arm64InsPrfum = 205
  fromEnum Arm64InsRaddhn = 206
  fromEnum Arm64InsRaddhn2 = 207
  fromEnum Arm64InsRbit = 208
  fromEnum Arm64InsRet = 209
  fromEnum Arm64InsRev16 = 210
  fromEnum Arm64InsRev32 = 211
  fromEnum Arm64InsRev64 = 212
  fromEnum Arm64InsRev = 213
  fromEnum Arm64InsRor = 214
  fromEnum Arm64InsRshrn2 = 215
  fromEnum Arm64InsRshrn = 216
  fromEnum Arm64InsRsubhn = 217
  fromEnum Arm64InsRsubhn2 = 218
  fromEnum Arm64InsSabal2 = 219
  fromEnum Arm64InsSabal = 220
  fromEnum Arm64InsSaba = 221
  fromEnum Arm64InsSabdl2 = 222
  fromEnum Arm64InsSabdl = 223
  fromEnum Arm64InsSabd = 224
  fromEnum Arm64InsSadalp = 225
  fromEnum Arm64InsSaddlp = 226
  fromEnum Arm64InsSaddlv = 227
  fromEnum Arm64InsSaddl2 = 228
  fromEnum Arm64InsSaddl = 229
  fromEnum Arm64InsSaddw2 = 230
  fromEnum Arm64InsSaddw = 231
  fromEnum Arm64InsSbc = 232
  fromEnum Arm64InsSbfm = 233
  fromEnum Arm64InsScvtf = 234
  fromEnum Arm64InsSdiv = 235
  fromEnum Arm64InsSha1c = 236
  fromEnum Arm64InsSha1h = 237
  fromEnum Arm64InsSha1m = 238
  fromEnum Arm64InsSha1p = 239
  fromEnum Arm64InsSha1su0 = 240
  fromEnum Arm64InsSha1su1 = 241
  fromEnum Arm64InsSha256h2 = 242
  fromEnum Arm64InsSha256h = 243
  fromEnum Arm64InsSha256su0 = 244
  fromEnum Arm64InsSha256su1 = 245
  fromEnum Arm64InsShadd = 246
  fromEnum Arm64InsShll2 = 247
  fromEnum Arm64InsShll = 248
  fromEnum Arm64InsShl = 249
  fromEnum Arm64InsShrn2 = 250
  fromEnum Arm64InsShrn = 251
  fromEnum Arm64InsShsub = 252
  fromEnum Arm64InsSli = 253
  fromEnum Arm64InsSmaddl = 254
  fromEnum Arm64InsSmaxp = 255
  fromEnum Arm64InsSmaxv = 256
  fromEnum Arm64InsSmax = 257
  fromEnum Arm64InsSmc = 258
  fromEnum Arm64InsSminp = 259
  fromEnum Arm64InsSminv = 260
  fromEnum Arm64InsSmin = 261
  fromEnum Arm64InsSmlal2 = 262
  fromEnum Arm64InsSmlal = 263
  fromEnum Arm64InsSmlsl2 = 264
  fromEnum Arm64InsSmlsl = 265
  fromEnum Arm64InsSmov = 266
  fromEnum Arm64InsSmsubl = 267
  fromEnum Arm64InsSmulh = 268
  fromEnum Arm64InsSmull2 = 269
  fromEnum Arm64InsSmull = 270
  fromEnum Arm64InsSqabs = 271
  fromEnum Arm64InsSqadd = 272
  fromEnum Arm64InsSqdmlal = 273
  fromEnum Arm64InsSqdmlal2 = 274
  fromEnum Arm64InsSqdmlsl = 275
  fromEnum Arm64InsSqdmlsl2 = 276
  fromEnum Arm64InsSqdmulh = 277
  fromEnum Arm64InsSqdmull = 278
  fromEnum Arm64InsSqdmull2 = 279
  fromEnum Arm64InsSqneg = 280
  fromEnum Arm64InsSqrdmulh = 281
  fromEnum Arm64InsSqrshl = 282
  fromEnum Arm64InsSqrshrn = 283
  fromEnum Arm64InsSqrshrn2 = 284
  fromEnum Arm64InsSqrshrun = 285
  fromEnum Arm64InsSqrshrun2 = 286
  fromEnum Arm64InsSqshlu = 287
  fromEnum Arm64InsSqshl = 288
  fromEnum Arm64InsSqshrn = 289
  fromEnum Arm64InsSqshrn2 = 290
  fromEnum Arm64InsSqshrun = 291
  fromEnum Arm64InsSqshrun2 = 292
  fromEnum Arm64InsSqsub = 293
  fromEnum Arm64InsSqxtn2 = 294
  fromEnum Arm64InsSqxtn = 295
  fromEnum Arm64InsSqxtun2 = 296
  fromEnum Arm64InsSqxtun = 297
  fromEnum Arm64InsSrhadd = 298
  fromEnum Arm64InsSri = 299
  fromEnum Arm64InsSrshl = 300
  fromEnum Arm64InsSrshr = 301
  fromEnum Arm64InsSrsra = 302
  fromEnum Arm64InsSshll2 = 303
  fromEnum Arm64InsSshll = 304
  fromEnum Arm64InsSshl = 305
  fromEnum Arm64InsSshr = 306
  fromEnum Arm64InsSsra = 307
  fromEnum Arm64InsSsubl2 = 308
  fromEnum Arm64InsSsubl = 309
  fromEnum Arm64InsSsubw2 = 310
  fromEnum Arm64InsSsubw = 311
  fromEnum Arm64InsSt1 = 312
  fromEnum Arm64InsSt2 = 313
  fromEnum Arm64InsSt3 = 314
  fromEnum Arm64InsSt4 = 315
  fromEnum Arm64InsStlrb = 316
  fromEnum Arm64InsStlrh = 317
  fromEnum Arm64InsStlr = 318
  fromEnum Arm64InsStlxp = 319
  fromEnum Arm64InsStlxrb = 320
  fromEnum Arm64InsStlxrh = 321
  fromEnum Arm64InsStlxr = 322
  fromEnum Arm64InsStnp = 323
  fromEnum Arm64InsStp = 324
  fromEnum Arm64InsStrb = 325
  fromEnum Arm64InsStr = 326
  fromEnum Arm64InsStrh = 327
  fromEnum Arm64InsSttrb = 328
  fromEnum Arm64InsSttrh = 329
  fromEnum Arm64InsSttr = 330
  fromEnum Arm64InsSturb = 331
  fromEnum Arm64InsStur = 332
  fromEnum Arm64InsSturh = 333
  fromEnum Arm64InsStxp = 334
  fromEnum Arm64InsStxrb = 335
  fromEnum Arm64InsStxrh = 336
  fromEnum Arm64InsStxr = 337
  fromEnum Arm64InsSubhn = 338
  fromEnum Arm64InsSubhn2 = 339
  fromEnum Arm64InsSub = 340
  fromEnum Arm64InsSuqadd = 341
  fromEnum Arm64InsSvc = 342
  fromEnum Arm64InsSysl = 343
  fromEnum Arm64InsSys = 344
  fromEnum Arm64InsTbl = 345
  fromEnum Arm64InsTbnz = 346
  fromEnum Arm64InsTbx = 347
  fromEnum Arm64InsTbz = 348
  fromEnum Arm64InsTrn1 = 349
  fromEnum Arm64InsTrn2 = 350
  fromEnum Arm64InsUabal2 = 351
  fromEnum Arm64InsUabal = 352
  fromEnum Arm64InsUaba = 353
  fromEnum Arm64InsUabdl2 = 354
  fromEnum Arm64InsUabdl = 355
  fromEnum Arm64InsUabd = 356
  fromEnum Arm64InsUadalp = 357
  fromEnum Arm64InsUaddlp = 358
  fromEnum Arm64InsUaddlv = 359
  fromEnum Arm64InsUaddl2 = 360
  fromEnum Arm64InsUaddl = 361
  fromEnum Arm64InsUaddw2 = 362
  fromEnum Arm64InsUaddw = 363
  fromEnum Arm64InsUbfm = 364
  fromEnum Arm64InsUcvtf = 365
  fromEnum Arm64InsUdiv = 366
  fromEnum Arm64InsUhadd = 367
  fromEnum Arm64InsUhsub = 368
  fromEnum Arm64InsUmaddl = 369
  fromEnum Arm64InsUmaxp = 370
  fromEnum Arm64InsUmaxv = 371
  fromEnum Arm64InsUmax = 372
  fromEnum Arm64InsUminp = 373
  fromEnum Arm64InsUminv = 374
  fromEnum Arm64InsUmin = 375
  fromEnum Arm64InsUmlal2 = 376
  fromEnum Arm64InsUmlal = 377
  fromEnum Arm64InsUmlsl2 = 378
  fromEnum Arm64InsUmlsl = 379
  fromEnum Arm64InsUmov = 380
  fromEnum Arm64InsUmsubl = 381
  fromEnum Arm64InsUmulh = 382
  fromEnum Arm64InsUmull2 = 383
  fromEnum Arm64InsUmull = 384
  fromEnum Arm64InsUqadd = 385
  fromEnum Arm64InsUqrshl = 386
  fromEnum Arm64InsUqrshrn = 387
  fromEnum Arm64InsUqrshrn2 = 388
  fromEnum Arm64InsUqshl = 389
  fromEnum Arm64InsUqshrn = 390
  fromEnum Arm64InsUqshrn2 = 391
  fromEnum Arm64InsUqsub = 392
  fromEnum Arm64InsUqxtn2 = 393
  fromEnum Arm64InsUqxtn = 394
  fromEnum Arm64InsUrecpe = 395
  fromEnum Arm64InsUrhadd = 396
  fromEnum Arm64InsUrshl = 397
  fromEnum Arm64InsUrshr = 398
  fromEnum Arm64InsUrsqrte = 399
  fromEnum Arm64InsUrsra = 400
  fromEnum Arm64InsUshll2 = 401
  fromEnum Arm64InsUshll = 402
  fromEnum Arm64InsUshl = 403
  fromEnum Arm64InsUshr = 404
  fromEnum Arm64InsUsqadd = 405
  fromEnum Arm64InsUsra = 406
  fromEnum Arm64InsUsubl2 = 407
  fromEnum Arm64InsUsubl = 408
  fromEnum Arm64InsUsubw2 = 409
  fromEnum Arm64InsUsubw = 410
  fromEnum Arm64InsUzp1 = 411
  fromEnum Arm64InsUzp2 = 412
  fromEnum Arm64InsXtn2 = 413
  fromEnum Arm64InsXtn = 414
  fromEnum Arm64InsZip1 = 415
  fromEnum Arm64InsZip2 = 416
  fromEnum Arm64InsMneg = 417
  fromEnum Arm64InsUmnegl = 418
  fromEnum Arm64InsSmnegl = 419
  fromEnum Arm64InsNop = 420
  fromEnum Arm64InsYield = 421
  fromEnum Arm64InsWfe = 422
  fromEnum Arm64InsWfi = 423
  fromEnum Arm64InsSev = 424
  fromEnum Arm64InsSevl = 425
  fromEnum Arm64InsNgc = 426
  fromEnum Arm64InsSbfiz = 427
  fromEnum Arm64InsUbfiz = 428
  fromEnum Arm64InsSbfx = 429
  fromEnum Arm64InsUbfx = 430
  fromEnum Arm64InsBfi = 431
  fromEnum Arm64InsBfxil = 432
  fromEnum Arm64InsCmn = 433
  fromEnum Arm64InsMvn = 434
  fromEnum Arm64InsTst = 435
  fromEnum Arm64InsCset = 436
  fromEnum Arm64InsCinc = 437
  fromEnum Arm64InsCsetm = 438
  fromEnum Arm64InsCinv = 439
  fromEnum Arm64InsCneg = 440
  fromEnum Arm64InsSxtb = 441
  fromEnum Arm64InsSxth = 442
  fromEnum Arm64InsSxtw = 443
  fromEnum Arm64InsCmp = 444
  fromEnum Arm64InsUxtb = 445
  fromEnum Arm64InsUxth = 446
  fromEnum Arm64InsUxtw = 447
  fromEnum Arm64InsIc = 448
  fromEnum Arm64InsDc = 449
  fromEnum Arm64InsAt = 450
  fromEnum Arm64InsTlbi = 451
  fromEnum Arm64InsEnding = 452

  toEnum 0 = Arm64InsInvalid
  toEnum 1 = Arm64InsAbs
  toEnum 2 = Arm64InsAdc
  toEnum 3 = Arm64InsAddhn
  toEnum 4 = Arm64InsAddhn2
  toEnum 5 = Arm64InsAddp
  toEnum 6 = Arm64InsAdd
  toEnum 7 = Arm64InsAddv
  toEnum 8 = Arm64InsAdr
  toEnum 9 = Arm64InsAdrp
  toEnum 10 = Arm64InsAesd
  toEnum 11 = Arm64InsAese
  toEnum 12 = Arm64InsAesimc
  toEnum 13 = Arm64InsAesmc
  toEnum 14 = Arm64InsAnd
  toEnum 15 = Arm64InsAsr
  toEnum 16 = Arm64InsB
  toEnum 17 = Arm64InsBfm
  toEnum 18 = Arm64InsBic
  toEnum 19 = Arm64InsBif
  toEnum 20 = Arm64InsBit
  toEnum 21 = Arm64InsBl
  toEnum 22 = Arm64InsBlr
  toEnum 23 = Arm64InsBr
  toEnum 24 = Arm64InsBrk
  toEnum 25 = Arm64InsBsl
  toEnum 26 = Arm64InsCbnz
  toEnum 27 = Arm64InsCbz
  toEnum 28 = Arm64InsCcmn
  toEnum 29 = Arm64InsCcmp
  toEnum 30 = Arm64InsClrex
  toEnum 31 = Arm64InsCls
  toEnum 32 = Arm64InsClz
  toEnum 33 = Arm64InsCmeq
  toEnum 34 = Arm64InsCmge
  toEnum 35 = Arm64InsCmgt
  toEnum 36 = Arm64InsCmhi
  toEnum 37 = Arm64InsCmhs
  toEnum 38 = Arm64InsCmle
  toEnum 39 = Arm64InsCmlt
  toEnum 40 = Arm64InsCmtst
  toEnum 41 = Arm64InsCnt
  toEnum 42 = Arm64InsMov
  toEnum 43 = Arm64InsCrc32b
  toEnum 44 = Arm64InsCrc32cb
  toEnum 45 = Arm64InsCrc32ch
  toEnum 46 = Arm64InsCrc32cw
  toEnum 47 = Arm64InsCrc32cx
  toEnum 48 = Arm64InsCrc32h
  toEnum 49 = Arm64InsCrc32w
  toEnum 50 = Arm64InsCrc32x
  toEnum 51 = Arm64InsCsel
  toEnum 52 = Arm64InsCsinc
  toEnum 53 = Arm64InsCsinv
  toEnum 54 = Arm64InsCsneg
  toEnum 55 = Arm64InsDcps1
  toEnum 56 = Arm64InsDcps2
  toEnum 57 = Arm64InsDcps3
  toEnum 58 = Arm64InsDmb
  toEnum 59 = Arm64InsDrps
  toEnum 60 = Arm64InsDsb
  toEnum 61 = Arm64InsDup
  toEnum 62 = Arm64InsEon
  toEnum 63 = Arm64InsEor
  toEnum 64 = Arm64InsEret
  toEnum 65 = Arm64InsExtr
  toEnum 66 = Arm64InsExt
  toEnum 67 = Arm64InsFabd
  toEnum 68 = Arm64InsFabs
  toEnum 69 = Arm64InsFacge
  toEnum 70 = Arm64InsFacgt
  toEnum 71 = Arm64InsFadd
  toEnum 72 = Arm64InsFaddp
  toEnum 73 = Arm64InsFccmp
  toEnum 74 = Arm64InsFccmpe
  toEnum 75 = Arm64InsFcmeq
  toEnum 76 = Arm64InsFcmge
  toEnum 77 = Arm64InsFcmgt
  toEnum 78 = Arm64InsFcmle
  toEnum 79 = Arm64InsFcmlt
  toEnum 80 = Arm64InsFcmp
  toEnum 81 = Arm64InsFcmpe
  toEnum 82 = Arm64InsFcsel
  toEnum 83 = Arm64InsFcvtas
  toEnum 84 = Arm64InsFcvtau
  toEnum 85 = Arm64InsFcvt
  toEnum 86 = Arm64InsFcvtl
  toEnum 87 = Arm64InsFcvtl2
  toEnum 88 = Arm64InsFcvtms
  toEnum 89 = Arm64InsFcvtmu
  toEnum 90 = Arm64InsFcvtns
  toEnum 91 = Arm64InsFcvtnu
  toEnum 92 = Arm64InsFcvtn
  toEnum 93 = Arm64InsFcvtn2
  toEnum 94 = Arm64InsFcvtps
  toEnum 95 = Arm64InsFcvtpu
  toEnum 96 = Arm64InsFcvtxn
  toEnum 97 = Arm64InsFcvtxn2
  toEnum 98 = Arm64InsFcvtzs
  toEnum 99 = Arm64InsFcvtzu
  toEnum 100 = Arm64InsFdiv
  toEnum 101 = Arm64InsFmadd
  toEnum 102 = Arm64InsFmax
  toEnum 103 = Arm64InsFmaxnm
  toEnum 104 = Arm64InsFmaxnmp
  toEnum 105 = Arm64InsFmaxnmv
  toEnum 106 = Arm64InsFmaxp
  toEnum 107 = Arm64InsFmaxv
  toEnum 108 = Arm64InsFmin
  toEnum 109 = Arm64InsFminnm
  toEnum 110 = Arm64InsFminnmp
  toEnum 111 = Arm64InsFminnmv
  toEnum 112 = Arm64InsFminp
  toEnum 113 = Arm64InsFminv
  toEnum 114 = Arm64InsFmla
  toEnum 115 = Arm64InsFmls
  toEnum 116 = Arm64InsFmov
  toEnum 117 = Arm64InsFmsub
  toEnum 118 = Arm64InsFmul
  toEnum 119 = Arm64InsFmulx
  toEnum 120 = Arm64InsFneg
  toEnum 121 = Arm64InsFnmadd
  toEnum 122 = Arm64InsFnmsub
  toEnum 123 = Arm64InsFnmul
  toEnum 124 = Arm64InsFrecpe
  toEnum 125 = Arm64InsFrecps
  toEnum 126 = Arm64InsFrecpx
  toEnum 127 = Arm64InsFrinta
  toEnum 128 = Arm64InsFrinti
  toEnum 129 = Arm64InsFrintm
  toEnum 130 = Arm64InsFrintn
  toEnum 131 = Arm64InsFrintp
  toEnum 132 = Arm64InsFrintx
  toEnum 133 = Arm64InsFrintz
  toEnum 134 = Arm64InsFrsqrte
  toEnum 135 = Arm64InsFrsqrts
  toEnum 136 = Arm64InsFsqrt
  toEnum 137 = Arm64InsFsub
  toEnum 138 = Arm64InsHint
  toEnum 139 = Arm64InsHlt
  toEnum 140 = Arm64InsHvc
  toEnum 141 = Arm64InsIns
  toEnum 142 = Arm64InsIsb
  toEnum 143 = Arm64InsLd1
  toEnum 144 = Arm64InsLd1r
  toEnum 145 = Arm64InsLd2r
  toEnum 146 = Arm64InsLd2
  toEnum 147 = Arm64InsLd3r
  toEnum 148 = Arm64InsLd3
  toEnum 149 = Arm64InsLd4
  toEnum 150 = Arm64InsLd4r
  toEnum 151 = Arm64InsLdarb
  toEnum 152 = Arm64InsLdarh
  toEnum 153 = Arm64InsLdar
  toEnum 154 = Arm64InsLdaxp
  toEnum 155 = Arm64InsLdaxrb
  toEnum 156 = Arm64InsLdaxrh
  toEnum 157 = Arm64InsLdaxr
  toEnum 158 = Arm64InsLdnp
  toEnum 159 = Arm64InsLdp
  toEnum 160 = Arm64InsLdpsw
  toEnum 161 = Arm64InsLdrb
  toEnum 162 = Arm64InsLdr
  toEnum 163 = Arm64InsLdrh
  toEnum 164 = Arm64InsLdrsb
  toEnum 165 = Arm64InsLdrsh
  toEnum 166 = Arm64InsLdrsw
  toEnum 167 = Arm64InsLdtrb
  toEnum 168 = Arm64InsLdtrh
  toEnum 169 = Arm64InsLdtrsb
  toEnum 170 = Arm64InsLdtrsh
  toEnum 171 = Arm64InsLdtrsw
  toEnum 172 = Arm64InsLdtr
  toEnum 173 = Arm64InsLdurb
  toEnum 174 = Arm64InsLdur
  toEnum 175 = Arm64InsLdurh
  toEnum 176 = Arm64InsLdursb
  toEnum 177 = Arm64InsLdursh
  toEnum 178 = Arm64InsLdursw
  toEnum 179 = Arm64InsLdxp
  toEnum 180 = Arm64InsLdxrb
  toEnum 181 = Arm64InsLdxrh
  toEnum 182 = Arm64InsLdxr
  toEnum 183 = Arm64InsLsl
  toEnum 184 = Arm64InsLsr
  toEnum 185 = Arm64InsMadd
  toEnum 186 = Arm64InsMla
  toEnum 187 = Arm64InsMls
  toEnum 188 = Arm64InsMovi
  toEnum 189 = Arm64InsMovk
  toEnum 190 = Arm64InsMovn
  toEnum 191 = Arm64InsMovz
  toEnum 192 = Arm64InsMrs
  toEnum 193 = Arm64InsMsr
  toEnum 194 = Arm64InsMsub
  toEnum 195 = Arm64InsMul
  toEnum 196 = Arm64InsMvni
  toEnum 197 = Arm64InsNeg
  toEnum 198 = Arm64InsNot
  toEnum 199 = Arm64InsOrn
  toEnum 200 = Arm64InsOrr
  toEnum 201 = Arm64InsPmull2
  toEnum 202 = Arm64InsPmull
  toEnum 203 = Arm64InsPmul
  toEnum 204 = Arm64InsPrfm
  toEnum 205 = Arm64InsPrfum
  toEnum 206 = Arm64InsRaddhn
  toEnum 207 = Arm64InsRaddhn2
  toEnum 208 = Arm64InsRbit
  toEnum 209 = Arm64InsRet
  toEnum 210 = Arm64InsRev16
  toEnum 211 = Arm64InsRev32
  toEnum 212 = Arm64InsRev64
  toEnum 213 = Arm64InsRev
  toEnum 214 = Arm64InsRor
  toEnum 215 = Arm64InsRshrn2
  toEnum 216 = Arm64InsRshrn
  toEnum 217 = Arm64InsRsubhn
  toEnum 218 = Arm64InsRsubhn2
  toEnum 219 = Arm64InsSabal2
  toEnum 220 = Arm64InsSabal
  toEnum 221 = Arm64InsSaba
  toEnum 222 = Arm64InsSabdl2
  toEnum 223 = Arm64InsSabdl
  toEnum 224 = Arm64InsSabd
  toEnum 225 = Arm64InsSadalp
  toEnum 226 = Arm64InsSaddlp
  toEnum 227 = Arm64InsSaddlv
  toEnum 228 = Arm64InsSaddl2
  toEnum 229 = Arm64InsSaddl
  toEnum 230 = Arm64InsSaddw2
  toEnum 231 = Arm64InsSaddw
  toEnum 232 = Arm64InsSbc
  toEnum 233 = Arm64InsSbfm
  toEnum 234 = Arm64InsScvtf
  toEnum 235 = Arm64InsSdiv
  toEnum 236 = Arm64InsSha1c
  toEnum 237 = Arm64InsSha1h
  toEnum 238 = Arm64InsSha1m
  toEnum 239 = Arm64InsSha1p
  toEnum 240 = Arm64InsSha1su0
  toEnum 241 = Arm64InsSha1su1
  toEnum 242 = Arm64InsSha256h2
  toEnum 243 = Arm64InsSha256h
  toEnum 244 = Arm64InsSha256su0
  toEnum 245 = Arm64InsSha256su1
  toEnum 246 = Arm64InsShadd
  toEnum 247 = Arm64InsShll2
  toEnum 248 = Arm64InsShll
  toEnum 249 = Arm64InsShl
  toEnum 250 = Arm64InsShrn2
  toEnum 251 = Arm64InsShrn
  toEnum 252 = Arm64InsShsub
  toEnum 253 = Arm64InsSli
  toEnum 254 = Arm64InsSmaddl
  toEnum 255 = Arm64InsSmaxp
  toEnum 256 = Arm64InsSmaxv
  toEnum 257 = Arm64InsSmax
  toEnum 258 = Arm64InsSmc
  toEnum 259 = Arm64InsSminp
  toEnum 260 = Arm64InsSminv
  toEnum 261 = Arm64InsSmin
  toEnum 262 = Arm64InsSmlal2
  toEnum 263 = Arm64InsSmlal
  toEnum 264 = Arm64InsSmlsl2
  toEnum 265 = Arm64InsSmlsl
  toEnum 266 = Arm64InsSmov
  toEnum 267 = Arm64InsSmsubl
  toEnum 268 = Arm64InsSmulh
  toEnum 269 = Arm64InsSmull2
  toEnum 270 = Arm64InsSmull
  toEnum 271 = Arm64InsSqabs
  toEnum 272 = Arm64InsSqadd
  toEnum 273 = Arm64InsSqdmlal
  toEnum 274 = Arm64InsSqdmlal2
  toEnum 275 = Arm64InsSqdmlsl
  toEnum 276 = Arm64InsSqdmlsl2
  toEnum 277 = Arm64InsSqdmulh
  toEnum 278 = Arm64InsSqdmull
  toEnum 279 = Arm64InsSqdmull2
  toEnum 280 = Arm64InsSqneg
  toEnum 281 = Arm64InsSqrdmulh
  toEnum 282 = Arm64InsSqrshl
  toEnum 283 = Arm64InsSqrshrn
  toEnum 284 = Arm64InsSqrshrn2
  toEnum 285 = Arm64InsSqrshrun
  toEnum 286 = Arm64InsSqrshrun2
  toEnum 287 = Arm64InsSqshlu
  toEnum 288 = Arm64InsSqshl
  toEnum 289 = Arm64InsSqshrn
  toEnum 290 = Arm64InsSqshrn2
  toEnum 291 = Arm64InsSqshrun
  toEnum 292 = Arm64InsSqshrun2
  toEnum 293 = Arm64InsSqsub
  toEnum 294 = Arm64InsSqxtn2
  toEnum 295 = Arm64InsSqxtn
  toEnum 296 = Arm64InsSqxtun2
  toEnum 297 = Arm64InsSqxtun
  toEnum 298 = Arm64InsSrhadd
  toEnum 299 = Arm64InsSri
  toEnum 300 = Arm64InsSrshl
  toEnum 301 = Arm64InsSrshr
  toEnum 302 = Arm64InsSrsra
  toEnum 303 = Arm64InsSshll2
  toEnum 304 = Arm64InsSshll
  toEnum 305 = Arm64InsSshl
  toEnum 306 = Arm64InsSshr
  toEnum 307 = Arm64InsSsra
  toEnum 308 = Arm64InsSsubl2
  toEnum 309 = Arm64InsSsubl
  toEnum 310 = Arm64InsSsubw2
  toEnum 311 = Arm64InsSsubw
  toEnum 312 = Arm64InsSt1
  toEnum 313 = Arm64InsSt2
  toEnum 314 = Arm64InsSt3
  toEnum 315 = Arm64InsSt4
  toEnum 316 = Arm64InsStlrb
  toEnum 317 = Arm64InsStlrh
  toEnum 318 = Arm64InsStlr
  toEnum 319 = Arm64InsStlxp
  toEnum 320 = Arm64InsStlxrb
  toEnum 321 = Arm64InsStlxrh
  toEnum 322 = Arm64InsStlxr
  toEnum 323 = Arm64InsStnp
  toEnum 324 = Arm64InsStp
  toEnum 325 = Arm64InsStrb
  toEnum 326 = Arm64InsStr
  toEnum 327 = Arm64InsStrh
  toEnum 328 = Arm64InsSttrb
  toEnum 329 = Arm64InsSttrh
  toEnum 330 = Arm64InsSttr
  toEnum 331 = Arm64InsSturb
  toEnum 332 = Arm64InsStur
  toEnum 333 = Arm64InsSturh
  toEnum 334 = Arm64InsStxp
  toEnum 335 = Arm64InsStxrb
  toEnum 336 = Arm64InsStxrh
  toEnum 337 = Arm64InsStxr
  toEnum 338 = Arm64InsSubhn
  toEnum 339 = Arm64InsSubhn2
  toEnum 340 = Arm64InsSub
  toEnum 341 = Arm64InsSuqadd
  toEnum 342 = Arm64InsSvc
  toEnum 343 = Arm64InsSysl
  toEnum 344 = Arm64InsSys
  toEnum 345 = Arm64InsTbl
  toEnum 346 = Arm64InsTbnz
  toEnum 347 = Arm64InsTbx
  toEnum 348 = Arm64InsTbz
  toEnum 349 = Arm64InsTrn1
  toEnum 350 = Arm64InsTrn2
  toEnum 351 = Arm64InsUabal2
  toEnum 352 = Arm64InsUabal
  toEnum 353 = Arm64InsUaba
  toEnum 354 = Arm64InsUabdl2
  toEnum 355 = Arm64InsUabdl
  toEnum 356 = Arm64InsUabd
  toEnum 357 = Arm64InsUadalp
  toEnum 358 = Arm64InsUaddlp
  toEnum 359 = Arm64InsUaddlv
  toEnum 360 = Arm64InsUaddl2
  toEnum 361 = Arm64InsUaddl
  toEnum 362 = Arm64InsUaddw2
  toEnum 363 = Arm64InsUaddw
  toEnum 364 = Arm64InsUbfm
  toEnum 365 = Arm64InsUcvtf
  toEnum 366 = Arm64InsUdiv
  toEnum 367 = Arm64InsUhadd
  toEnum 368 = Arm64InsUhsub
  toEnum 369 = Arm64InsUmaddl
  toEnum 370 = Arm64InsUmaxp
  toEnum 371 = Arm64InsUmaxv
  toEnum 372 = Arm64InsUmax
  toEnum 373 = Arm64InsUminp
  toEnum 374 = Arm64InsUminv
  toEnum 375 = Arm64InsUmin
  toEnum 376 = Arm64InsUmlal2
  toEnum 377 = Arm64InsUmlal
  toEnum 378 = Arm64InsUmlsl2
  toEnum 379 = Arm64InsUmlsl
  toEnum 380 = Arm64InsUmov
  toEnum 381 = Arm64InsUmsubl
  toEnum 382 = Arm64InsUmulh
  toEnum 383 = Arm64InsUmull2
  toEnum 384 = Arm64InsUmull
  toEnum 385 = Arm64InsUqadd
  toEnum 386 = Arm64InsUqrshl
  toEnum 387 = Arm64InsUqrshrn
  toEnum 388 = Arm64InsUqrshrn2
  toEnum 389 = Arm64InsUqshl
  toEnum 390 = Arm64InsUqshrn
  toEnum 391 = Arm64InsUqshrn2
  toEnum 392 = Arm64InsUqsub
  toEnum 393 = Arm64InsUqxtn2
  toEnum 394 = Arm64InsUqxtn
  toEnum 395 = Arm64InsUrecpe
  toEnum 396 = Arm64InsUrhadd
  toEnum 397 = Arm64InsUrshl
  toEnum 398 = Arm64InsUrshr
  toEnum 399 = Arm64InsUrsqrte
  toEnum 400 = Arm64InsUrsra
  toEnum 401 = Arm64InsUshll2
  toEnum 402 = Arm64InsUshll
  toEnum 403 = Arm64InsUshl
  toEnum 404 = Arm64InsUshr
  toEnum 405 = Arm64InsUsqadd
  toEnum 406 = Arm64InsUsra
  toEnum 407 = Arm64InsUsubl2
  toEnum 408 = Arm64InsUsubl
  toEnum 409 = Arm64InsUsubw2
  toEnum 410 = Arm64InsUsubw
  toEnum 411 = Arm64InsUzp1
  toEnum 412 = Arm64InsUzp2
  toEnum 413 = Arm64InsXtn2
  toEnum 414 = Arm64InsXtn
  toEnum 415 = Arm64InsZip1
  toEnum 416 = Arm64InsZip2
  toEnum 417 = Arm64InsMneg
  toEnum 418 = Arm64InsUmnegl
  toEnum 419 = Arm64InsSmnegl
  toEnum 420 = Arm64InsNop
  toEnum 421 = Arm64InsYield
  toEnum 422 = Arm64InsWfe
  toEnum 423 = Arm64InsWfi
  toEnum 424 = Arm64InsSev
  toEnum 425 = Arm64InsSevl
  toEnum 426 = Arm64InsNgc
  toEnum 427 = Arm64InsSbfiz
  toEnum 428 = Arm64InsUbfiz
  toEnum 429 = Arm64InsSbfx
  toEnum 430 = Arm64InsUbfx
  toEnum 431 = Arm64InsBfi
  toEnum 432 = Arm64InsBfxil
  toEnum 433 = Arm64InsCmn
  toEnum 434 = Arm64InsMvn
  toEnum 435 = Arm64InsTst
  toEnum 436 = Arm64InsCset
  toEnum 437 = Arm64InsCinc
  toEnum 438 = Arm64InsCsetm
  toEnum 439 = Arm64InsCinv
  toEnum 440 = Arm64InsCneg
  toEnum 441 = Arm64InsSxtb
  toEnum 442 = Arm64InsSxth
  toEnum 443 = Arm64InsSxtw
  toEnum 444 = Arm64InsCmp
  toEnum 445 = Arm64InsUxtb
  toEnum 446 = Arm64InsUxth
  toEnum 447 = Arm64InsUxtw
  toEnum 448 = Arm64InsIc
  toEnum 449 = Arm64InsDc
  toEnum 450 = Arm64InsAt
  toEnum 451 = Arm64InsTlbi
  toEnum 452 = Arm64InsEnding
  toEnum unmatched = error ("Arm64Insn.toEnum: Cannot match " ++ show unmatched)

{-# LINE 237 "src/Hapstone/Internal/Arm64.chs" #-}

-- | ARM64 instruction groups
data Arm64InsnGroup = Arm64GrpInvalid
                    | Arm64GrpJump
                    | Arm64GrpCall
                    | Arm64GrpRet
                    | Arm64GrpInt
                    | Arm64GrpPrivilege
                    | Arm64GrpCrypto
                    | Arm64GrpFparmv8
                    | Arm64GrpNeon
                    | Arm64GrpCrc
                    | Arm64GrpEnding
  deriving (Show,Eq,Bounded)
instance Enum Arm64InsnGroup where
  succ Arm64GrpInvalid = Arm64GrpJump
  succ Arm64GrpJump = Arm64GrpCall
  succ Arm64GrpCall = Arm64GrpRet
  succ Arm64GrpRet = Arm64GrpInt
  succ Arm64GrpInt = Arm64GrpPrivilege
  succ Arm64GrpPrivilege = Arm64GrpCrypto
  succ Arm64GrpCrypto = Arm64GrpFparmv8
  succ Arm64GrpFparmv8 = Arm64GrpNeon
  succ Arm64GrpNeon = Arm64GrpCrc
  succ Arm64GrpCrc = Arm64GrpEnding
  succ Arm64GrpEnding = error "Arm64InsnGroup.succ: Arm64GrpEnding has no successor"

  pred Arm64GrpJump = Arm64GrpInvalid
  pred Arm64GrpCall = Arm64GrpJump
  pred Arm64GrpRet = Arm64GrpCall
  pred Arm64GrpInt = Arm64GrpRet
  pred Arm64GrpPrivilege = Arm64GrpInt
  pred Arm64GrpCrypto = Arm64GrpPrivilege
  pred Arm64GrpFparmv8 = Arm64GrpCrypto
  pred Arm64GrpNeon = Arm64GrpFparmv8
  pred Arm64GrpCrc = Arm64GrpNeon
  pred Arm64GrpEnding = Arm64GrpCrc
  pred Arm64GrpInvalid = error "Arm64InsnGroup.pred: Arm64GrpInvalid 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 Arm64GrpEnding

  fromEnum Arm64GrpInvalid = 0
  fromEnum Arm64GrpJump = 1
  fromEnum Arm64GrpCall = 2
  fromEnum Arm64GrpRet = 3
  fromEnum Arm64GrpInt = 4
  fromEnum Arm64GrpPrivilege = 6
  fromEnum Arm64GrpCrypto = 128
  fromEnum Arm64GrpFparmv8 = 129
  fromEnum Arm64GrpNeon = 130
  fromEnum Arm64GrpCrc = 131
  fromEnum Arm64GrpEnding = 132

  toEnum 0 = Arm64GrpInvalid
  toEnum 1 = Arm64GrpJump
  toEnum 2 = Arm64GrpCall
  toEnum 3 = Arm64GrpRet
  toEnum 4 = Arm64GrpInt
  toEnum 6 = Arm64GrpPrivilege
  toEnum 128 = Arm64GrpCrypto
  toEnum 129 = Arm64GrpFparmv8
  toEnum 130 = Arm64GrpNeon
  toEnum 131 = Arm64GrpCrc
  toEnum 132 = Arm64GrpEnding
  toEnum unmatched = error ("Arm64InsnGroup.toEnum: Cannot match " ++ show unmatched)

{-# LINE 240 "src/Hapstone/Internal/Arm64.chs" #-}