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






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


import Foreign
import Foreign.C.Types

-- | SPARC condition codes
data SparcCc = SparcCcInvalid
             | SparcCcIccN
             | SparcCcIccE
             | SparcCcIccLe
             | SparcCcIccL
             | SparcCcIccLeu
             | SparcCcIccCs
             | SparcCcIccNeg
             | SparcCcIccVs
             | SparcCcIccA
             | SparcCcIccNe
             | SparcCcIccG
             | SparcCcIccGe
             | SparcCcIccGu
             | SparcCcIccCc
             | SparcCcIccPos
             | SparcCcIccVc
             | SparcCcFccN
             | SparcCcFccNe
             | SparcCcFccLg
             | SparcCcFccUl
             | SparcCcFccL
             | SparcCcFccUg
             | SparcCcFccG
             | SparcCcFccU
             | SparcCcFccA
             | SparcCcFccE
             | SparcCcFccUe
             | SparcCcFccGe
             | SparcCcFccUge
             | SparcCcFccLe
             | SparcCcFccUle
             | SparcCcFccO
  deriving (Show,Eq,Bounded)
instance Enum SparcCc where
  succ SparcCcInvalid = SparcCcIccN
  succ SparcCcIccN = SparcCcIccE
  succ SparcCcIccE = SparcCcIccLe
  succ SparcCcIccLe = SparcCcIccL
  succ SparcCcIccL = SparcCcIccLeu
  succ SparcCcIccLeu = SparcCcIccCs
  succ SparcCcIccCs = SparcCcIccNeg
  succ SparcCcIccNeg = SparcCcIccVs
  succ SparcCcIccVs = SparcCcIccA
  succ SparcCcIccA = SparcCcIccNe
  succ SparcCcIccNe = SparcCcIccG
  succ SparcCcIccG = SparcCcIccGe
  succ SparcCcIccGe = SparcCcIccGu
  succ SparcCcIccGu = SparcCcIccCc
  succ SparcCcIccCc = SparcCcIccPos
  succ SparcCcIccPos = SparcCcIccVc
  succ SparcCcIccVc = SparcCcFccN
  succ SparcCcFccN = SparcCcFccNe
  succ SparcCcFccNe = SparcCcFccLg
  succ SparcCcFccLg = SparcCcFccUl
  succ SparcCcFccUl = SparcCcFccL
  succ SparcCcFccL = SparcCcFccUg
  succ SparcCcFccUg = SparcCcFccG
  succ SparcCcFccG = SparcCcFccU
  succ SparcCcFccU = SparcCcFccA
  succ SparcCcFccA = SparcCcFccE
  succ SparcCcFccE = SparcCcFccUe
  succ SparcCcFccUe = SparcCcFccGe
  succ SparcCcFccGe = SparcCcFccUge
  succ SparcCcFccUge = SparcCcFccLe
  succ SparcCcFccLe = SparcCcFccUle
  succ SparcCcFccUle = SparcCcFccO
  succ SparcCcFccO = error "SparcCc.succ: SparcCcFccO has no successor"

  pred SparcCcIccN = SparcCcInvalid
  pred SparcCcIccE = SparcCcIccN
  pred SparcCcIccLe = SparcCcIccE
  pred SparcCcIccL = SparcCcIccLe
  pred SparcCcIccLeu = SparcCcIccL
  pred SparcCcIccCs = SparcCcIccLeu
  pred SparcCcIccNeg = SparcCcIccCs
  pred SparcCcIccVs = SparcCcIccNeg
  pred SparcCcIccA = SparcCcIccVs
  pred SparcCcIccNe = SparcCcIccA
  pred SparcCcIccG = SparcCcIccNe
  pred SparcCcIccGe = SparcCcIccG
  pred SparcCcIccGu = SparcCcIccGe
  pred SparcCcIccCc = SparcCcIccGu
  pred SparcCcIccPos = SparcCcIccCc
  pred SparcCcIccVc = SparcCcIccPos
  pred SparcCcFccN = SparcCcIccVc
  pred SparcCcFccNe = SparcCcFccN
  pred SparcCcFccLg = SparcCcFccNe
  pred SparcCcFccUl = SparcCcFccLg
  pred SparcCcFccL = SparcCcFccUl
  pred SparcCcFccUg = SparcCcFccL
  pred SparcCcFccG = SparcCcFccUg
  pred SparcCcFccU = SparcCcFccG
  pred SparcCcFccA = SparcCcFccU
  pred SparcCcFccE = SparcCcFccA
  pred SparcCcFccUe = SparcCcFccE
  pred SparcCcFccGe = SparcCcFccUe
  pred SparcCcFccUge = SparcCcFccGe
  pred SparcCcFccLe = SparcCcFccUge
  pred SparcCcFccUle = SparcCcFccLe
  pred SparcCcFccO = SparcCcFccUle
  pred SparcCcInvalid = error "SparcCc.pred: SparcCcInvalid 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 SparcCcFccO

  fromEnum SparcCcInvalid = 0
  fromEnum SparcCcIccN = 256
  fromEnum SparcCcIccE = 257
  fromEnum SparcCcIccLe = 258
  fromEnum SparcCcIccL = 259
  fromEnum SparcCcIccLeu = 260
  fromEnum SparcCcIccCs = 261
  fromEnum SparcCcIccNeg = 262
  fromEnum SparcCcIccVs = 263
  fromEnum SparcCcIccA = 264
  fromEnum SparcCcIccNe = 265
  fromEnum SparcCcIccG = 266
  fromEnum SparcCcIccGe = 267
  fromEnum SparcCcIccGu = 268
  fromEnum SparcCcIccCc = 269
  fromEnum SparcCcIccPos = 270
  fromEnum SparcCcIccVc = 271
  fromEnum SparcCcFccN = 272
  fromEnum SparcCcFccNe = 273
  fromEnum SparcCcFccLg = 274
  fromEnum SparcCcFccUl = 275
  fromEnum SparcCcFccL = 276
  fromEnum SparcCcFccUg = 277
  fromEnum SparcCcFccG = 278
  fromEnum SparcCcFccU = 279
  fromEnum SparcCcFccA = 280
  fromEnum SparcCcFccE = 281
  fromEnum SparcCcFccUe = 282
  fromEnum SparcCcFccGe = 283
  fromEnum SparcCcFccUge = 284
  fromEnum SparcCcFccLe = 285
  fromEnum SparcCcFccUle = 286
  fromEnum SparcCcFccO = 287

  toEnum 0 = SparcCcInvalid
  toEnum 256 = SparcCcIccN
  toEnum 257 = SparcCcIccE
  toEnum 258 = SparcCcIccLe
  toEnum 259 = SparcCcIccL
  toEnum 260 = SparcCcIccLeu
  toEnum 261 = SparcCcIccCs
  toEnum 262 = SparcCcIccNeg
  toEnum 263 = SparcCcIccVs
  toEnum 264 = SparcCcIccA
  toEnum 265 = SparcCcIccNe
  toEnum 266 = SparcCcIccG
  toEnum 267 = SparcCcIccGe
  toEnum 268 = SparcCcIccGu
  toEnum 269 = SparcCcIccCc
  toEnum 270 = SparcCcIccPos
  toEnum 271 = SparcCcIccVc
  toEnum 272 = SparcCcFccN
  toEnum 273 = SparcCcFccNe
  toEnum 274 = SparcCcFccLg
  toEnum 275 = SparcCcFccUl
  toEnum 276 = SparcCcFccL
  toEnum 277 = SparcCcFccUg
  toEnum 278 = SparcCcFccG
  toEnum 279 = SparcCcFccU
  toEnum 280 = SparcCcFccA
  toEnum 281 = SparcCcFccE
  toEnum 282 = SparcCcFccUe
  toEnum 283 = SparcCcFccGe
  toEnum 284 = SparcCcFccUge
  toEnum 285 = SparcCcFccLe
  toEnum 286 = SparcCcFccUle
  toEnum 287 = SparcCcFccO
  toEnum unmatched = error ("SparcCc.toEnum: Cannot match " ++ show unmatched)

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

-- | SPARC branch hint
data SparcHint = SparcHintInvalid
               | SparcHintA
               | SparcHintPt
               | SparcHintPn
  deriving (Show,Eq,Bounded)
instance Enum SparcHint where
  succ SparcHintInvalid = SparcHintA
  succ SparcHintA = SparcHintPt
  succ SparcHintPt = SparcHintPn
  succ SparcHintPn = error "SparcHint.succ: SparcHintPn has no successor"

  pred SparcHintA = SparcHintInvalid
  pred SparcHintPt = SparcHintA
  pred SparcHintPn = SparcHintPt
  pred SparcHintInvalid = error "SparcHint.pred: SparcHintInvalid 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 SparcHintPn

  fromEnum SparcHintInvalid = 0
  fromEnum SparcHintA = 1
  fromEnum SparcHintPt = 2
  fromEnum SparcHintPn = 4

  toEnum 0 = SparcHintInvalid
  toEnum 1 = SparcHintA
  toEnum 2 = SparcHintPt
  toEnum 4 = SparcHintPn
  toEnum unmatched = error ("SparcHint.toEnum: Cannot match " ++ show unmatched)

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


-- | operand type for instruction's operands
data SparcOpType = SparcOpInvalid
                 | SparcOpReg
                 | SparcOpImm
                 | SparcOpMem
  deriving (Show,Eq,Bounded)
instance Enum SparcOpType where
  succ SparcOpInvalid = SparcOpReg
  succ SparcOpReg = SparcOpImm
  succ SparcOpImm = SparcOpMem
  succ SparcOpMem = error "SparcOpType.succ: SparcOpMem has no successor"

  pred SparcOpReg = SparcOpInvalid
  pred SparcOpImm = SparcOpReg
  pred SparcOpMem = SparcOpImm
  pred SparcOpInvalid = error "SparcOpType.pred: SparcOpInvalid 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 SparcOpMem

  fromEnum SparcOpInvalid = 0
  fromEnum SparcOpReg = 1
  fromEnum SparcOpImm = 2
  fromEnum SparcOpMem = 3

  toEnum 0 = SparcOpInvalid
  toEnum 1 = SparcOpReg
  toEnum 2 = SparcOpImm
  toEnum 3 = SparcOpMem
  toEnum unmatched = error ("SparcOpType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 39 "src/Hapstone/Internal/Sparc.chs" #-}


-- | SPARC registers
data SparcReg = SparcRegInvalid
              | SparcRegF0
              | SparcRegF1
              | SparcRegF2
              | SparcRegF3
              | SparcRegF4
              | SparcRegF5
              | SparcRegF6
              | SparcRegF7
              | SparcRegF8
              | SparcRegF9
              | SparcRegF10
              | SparcRegF11
              | SparcRegF12
              | SparcRegF13
              | SparcRegF14
              | SparcRegF15
              | SparcRegF16
              | SparcRegF17
              | SparcRegF18
              | SparcRegF19
              | SparcRegF20
              | SparcRegF21
              | SparcRegF22
              | SparcRegF23
              | SparcRegF24
              | SparcRegF25
              | SparcRegF26
              | SparcRegF27
              | SparcRegF28
              | SparcRegF29
              | SparcRegF30
              | SparcRegF31
              | SparcRegF32
              | SparcRegF34
              | SparcRegF36
              | SparcRegF38
              | SparcRegF40
              | SparcRegF42
              | SparcRegF44
              | SparcRegF46
              | SparcRegF48
              | SparcRegF50
              | SparcRegF52
              | SparcRegF54
              | SparcRegF56
              | SparcRegF58
              | SparcRegF60
              | SparcRegF62
              | SparcRegFcc0
              | SparcRegFcc1
              | SparcRegFcc2
              | SparcRegFcc3
              | SparcRegFp
              | SparcRegI6
              | SparcRegG0
              | SparcRegG1
              | SparcRegG2
              | SparcRegG3
              | SparcRegG4
              | SparcRegG5
              | SparcRegG6
              | SparcRegG7
              | SparcRegI0
              | SparcRegI1
              | SparcRegI2
              | SparcRegI3
              | SparcRegI4
              | SparcRegI5
              | SparcRegI7
              | SparcRegIcc
              | SparcRegL0
              | SparcRegL1
              | SparcRegL2
              | SparcRegL3
              | SparcRegL4
              | SparcRegL5
              | SparcRegL6
              | SparcRegL7
              | SparcRegO0
              | SparcRegO1
              | SparcRegO2
              | SparcRegO3
              | SparcRegO4
              | SparcRegO5
              | SparcRegO7
              | SparcRegSp
              | SparcRegO6
              | SparcRegY
              | SparcRegXcc
              | SparcRegEnding
  deriving (Show,Eq,Bounded)
instance Enum SparcReg where
  succ SparcRegInvalid = SparcRegF0
  succ SparcRegF0 = SparcRegF1
  succ SparcRegF1 = SparcRegF2
  succ SparcRegF2 = SparcRegF3
  succ SparcRegF3 = SparcRegF4
  succ SparcRegF4 = SparcRegF5
  succ SparcRegF5 = SparcRegF6
  succ SparcRegF6 = SparcRegF7
  succ SparcRegF7 = SparcRegF8
  succ SparcRegF8 = SparcRegF9
  succ SparcRegF9 = SparcRegF10
  succ SparcRegF10 = SparcRegF11
  succ SparcRegF11 = SparcRegF12
  succ SparcRegF12 = SparcRegF13
  succ SparcRegF13 = SparcRegF14
  succ SparcRegF14 = SparcRegF15
  succ SparcRegF15 = SparcRegF16
  succ SparcRegF16 = SparcRegF17
  succ SparcRegF17 = SparcRegF18
  succ SparcRegF18 = SparcRegF19
  succ SparcRegF19 = SparcRegF20
  succ SparcRegF20 = SparcRegF21
  succ SparcRegF21 = SparcRegF22
  succ SparcRegF22 = SparcRegF23
  succ SparcRegF23 = SparcRegF24
  succ SparcRegF24 = SparcRegF25
  succ SparcRegF25 = SparcRegF26
  succ SparcRegF26 = SparcRegF27
  succ SparcRegF27 = SparcRegF28
  succ SparcRegF28 = SparcRegF29
  succ SparcRegF29 = SparcRegF30
  succ SparcRegF30 = SparcRegF31
  succ SparcRegF31 = SparcRegF32
  succ SparcRegF32 = SparcRegF34
  succ SparcRegF34 = SparcRegF36
  succ SparcRegF36 = SparcRegF38
  succ SparcRegF38 = SparcRegF40
  succ SparcRegF40 = SparcRegF42
  succ SparcRegF42 = SparcRegF44
  succ SparcRegF44 = SparcRegF46
  succ SparcRegF46 = SparcRegF48
  succ SparcRegF48 = SparcRegF50
  succ SparcRegF50 = SparcRegF52
  succ SparcRegF52 = SparcRegF54
  succ SparcRegF54 = SparcRegF56
  succ SparcRegF56 = SparcRegF58
  succ SparcRegF58 = SparcRegF60
  succ SparcRegF60 = SparcRegF62
  succ SparcRegF62 = SparcRegFcc0
  succ SparcRegFcc0 = SparcRegFcc1
  succ SparcRegFcc1 = SparcRegFcc2
  succ SparcRegFcc2 = SparcRegFcc3
  succ SparcRegFcc3 = SparcRegFp
  succ SparcRegFp = SparcRegG0
  succ SparcRegI6 = SparcRegG0
  succ SparcRegG0 = SparcRegG1
  succ SparcRegG1 = SparcRegG2
  succ SparcRegG2 = SparcRegG3
  succ SparcRegG3 = SparcRegG4
  succ SparcRegG4 = SparcRegG5
  succ SparcRegG5 = SparcRegG6
  succ SparcRegG6 = SparcRegG7
  succ SparcRegG7 = SparcRegI0
  succ SparcRegI0 = SparcRegI1
  succ SparcRegI1 = SparcRegI2
  succ SparcRegI2 = SparcRegI3
  succ SparcRegI3 = SparcRegI4
  succ SparcRegI4 = SparcRegI5
  succ SparcRegI5 = SparcRegI7
  succ SparcRegI7 = SparcRegIcc
  succ SparcRegIcc = SparcRegL0
  succ SparcRegL0 = SparcRegL1
  succ SparcRegL1 = SparcRegL2
  succ SparcRegL2 = SparcRegL3
  succ SparcRegL3 = SparcRegL4
  succ SparcRegL4 = SparcRegL5
  succ SparcRegL5 = SparcRegL6
  succ SparcRegL6 = SparcRegL7
  succ SparcRegL7 = SparcRegO0
  succ SparcRegO0 = SparcRegO1
  succ SparcRegO1 = SparcRegO2
  succ SparcRegO2 = SparcRegO3
  succ SparcRegO3 = SparcRegO4
  succ SparcRegO4 = SparcRegO5
  succ SparcRegO5 = SparcRegO7
  succ SparcRegO7 = SparcRegSp
  succ SparcRegSp = SparcRegY
  succ SparcRegO6 = SparcRegY
  succ SparcRegY = SparcRegXcc
  succ SparcRegXcc = SparcRegEnding
  succ SparcRegEnding = error "SparcReg.succ: SparcRegEnding has no successor"

  pred SparcRegF0 = SparcRegInvalid
  pred SparcRegF1 = SparcRegF0
  pred SparcRegF2 = SparcRegF1
  pred SparcRegF3 = SparcRegF2
  pred SparcRegF4 = SparcRegF3
  pred SparcRegF5 = SparcRegF4
  pred SparcRegF6 = SparcRegF5
  pred SparcRegF7 = SparcRegF6
  pred SparcRegF8 = SparcRegF7
  pred SparcRegF9 = SparcRegF8
  pred SparcRegF10 = SparcRegF9
  pred SparcRegF11 = SparcRegF10
  pred SparcRegF12 = SparcRegF11
  pred SparcRegF13 = SparcRegF12
  pred SparcRegF14 = SparcRegF13
  pred SparcRegF15 = SparcRegF14
  pred SparcRegF16 = SparcRegF15
  pred SparcRegF17 = SparcRegF16
  pred SparcRegF18 = SparcRegF17
  pred SparcRegF19 = SparcRegF18
  pred SparcRegF20 = SparcRegF19
  pred SparcRegF21 = SparcRegF20
  pred SparcRegF22 = SparcRegF21
  pred SparcRegF23 = SparcRegF22
  pred SparcRegF24 = SparcRegF23
  pred SparcRegF25 = SparcRegF24
  pred SparcRegF26 = SparcRegF25
  pred SparcRegF27 = SparcRegF26
  pred SparcRegF28 = SparcRegF27
  pred SparcRegF29 = SparcRegF28
  pred SparcRegF30 = SparcRegF29
  pred SparcRegF31 = SparcRegF30
  pred SparcRegF32 = SparcRegF31
  pred SparcRegF34 = SparcRegF32
  pred SparcRegF36 = SparcRegF34
  pred SparcRegF38 = SparcRegF36
  pred SparcRegF40 = SparcRegF38
  pred SparcRegF42 = SparcRegF40
  pred SparcRegF44 = SparcRegF42
  pred SparcRegF46 = SparcRegF44
  pred SparcRegF48 = SparcRegF46
  pred SparcRegF50 = SparcRegF48
  pred SparcRegF52 = SparcRegF50
  pred SparcRegF54 = SparcRegF52
  pred SparcRegF56 = SparcRegF54
  pred SparcRegF58 = SparcRegF56
  pred SparcRegF60 = SparcRegF58
  pred SparcRegF62 = SparcRegF60
  pred SparcRegFcc0 = SparcRegF62
  pred SparcRegFcc1 = SparcRegFcc0
  pred SparcRegFcc2 = SparcRegFcc1
  pred SparcRegFcc3 = SparcRegFcc2
  pred SparcRegFp = SparcRegFcc3
  pred SparcRegI6 = SparcRegFcc3
  pred SparcRegG0 = SparcRegFp
  pred SparcRegG1 = SparcRegG0
  pred SparcRegG2 = SparcRegG1
  pred SparcRegG3 = SparcRegG2
  pred SparcRegG4 = SparcRegG3
  pred SparcRegG5 = SparcRegG4
  pred SparcRegG6 = SparcRegG5
  pred SparcRegG7 = SparcRegG6
  pred SparcRegI0 = SparcRegG7
  pred SparcRegI1 = SparcRegI0
  pred SparcRegI2 = SparcRegI1
  pred SparcRegI3 = SparcRegI2
  pred SparcRegI4 = SparcRegI3
  pred SparcRegI5 = SparcRegI4
  pred SparcRegI7 = SparcRegI5
  pred SparcRegIcc = SparcRegI7
  pred SparcRegL0 = SparcRegIcc
  pred SparcRegL1 = SparcRegL0
  pred SparcRegL2 = SparcRegL1
  pred SparcRegL3 = SparcRegL2
  pred SparcRegL4 = SparcRegL3
  pred SparcRegL5 = SparcRegL4
  pred SparcRegL6 = SparcRegL5
  pred SparcRegL7 = SparcRegL6
  pred SparcRegO0 = SparcRegL7
  pred SparcRegO1 = SparcRegO0
  pred SparcRegO2 = SparcRegO1
  pred SparcRegO3 = SparcRegO2
  pred SparcRegO4 = SparcRegO3
  pred SparcRegO5 = SparcRegO4
  pred SparcRegO7 = SparcRegO5
  pred SparcRegSp = SparcRegO7
  pred SparcRegO6 = SparcRegO7
  pred SparcRegY = SparcRegSp
  pred SparcRegXcc = SparcRegY
  pred SparcRegEnding = SparcRegXcc
  pred SparcRegInvalid = error "SparcReg.pred: SparcRegInvalid 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 SparcRegEnding

  fromEnum SparcRegInvalid = 0
  fromEnum SparcRegF0 = 1
  fromEnum SparcRegF1 = 2
  fromEnum SparcRegF2 = 3
  fromEnum SparcRegF3 = 4
  fromEnum SparcRegF4 = 5
  fromEnum SparcRegF5 = 6
  fromEnum SparcRegF6 = 7
  fromEnum SparcRegF7 = 8
  fromEnum SparcRegF8 = 9
  fromEnum SparcRegF9 = 10
  fromEnum SparcRegF10 = 11
  fromEnum SparcRegF11 = 12
  fromEnum SparcRegF12 = 13
  fromEnum SparcRegF13 = 14
  fromEnum SparcRegF14 = 15
  fromEnum SparcRegF15 = 16
  fromEnum SparcRegF16 = 17
  fromEnum SparcRegF17 = 18
  fromEnum SparcRegF18 = 19
  fromEnum SparcRegF19 = 20
  fromEnum SparcRegF20 = 21
  fromEnum SparcRegF21 = 22
  fromEnum SparcRegF22 = 23
  fromEnum SparcRegF23 = 24
  fromEnum SparcRegF24 = 25
  fromEnum SparcRegF25 = 26
  fromEnum SparcRegF26 = 27
  fromEnum SparcRegF27 = 28
  fromEnum SparcRegF28 = 29
  fromEnum SparcRegF29 = 30
  fromEnum SparcRegF30 = 31
  fromEnum SparcRegF31 = 32
  fromEnum SparcRegF32 = 33
  fromEnum SparcRegF34 = 34
  fromEnum SparcRegF36 = 35
  fromEnum SparcRegF38 = 36
  fromEnum SparcRegF40 = 37
  fromEnum SparcRegF42 = 38
  fromEnum SparcRegF44 = 39
  fromEnum SparcRegF46 = 40
  fromEnum SparcRegF48 = 41
  fromEnum SparcRegF50 = 42
  fromEnum SparcRegF52 = 43
  fromEnum SparcRegF54 = 44
  fromEnum SparcRegF56 = 45
  fromEnum SparcRegF58 = 46
  fromEnum SparcRegF60 = 47
  fromEnum SparcRegF62 = 48
  fromEnum SparcRegFcc0 = 49
  fromEnum SparcRegFcc1 = 50
  fromEnum SparcRegFcc2 = 51
  fromEnum SparcRegFcc3 = 52
  fromEnum SparcRegFp = 53
  fromEnum SparcRegI6 = 53
  fromEnum SparcRegG0 = 54
  fromEnum SparcRegG1 = 55
  fromEnum SparcRegG2 = 56
  fromEnum SparcRegG3 = 57
  fromEnum SparcRegG4 = 58
  fromEnum SparcRegG5 = 59
  fromEnum SparcRegG6 = 60
  fromEnum SparcRegG7 = 61
  fromEnum SparcRegI0 = 62
  fromEnum SparcRegI1 = 63
  fromEnum SparcRegI2 = 64
  fromEnum SparcRegI3 = 65
  fromEnum SparcRegI4 = 66
  fromEnum SparcRegI5 = 67
  fromEnum SparcRegI7 = 68
  fromEnum SparcRegIcc = 69
  fromEnum SparcRegL0 = 70
  fromEnum SparcRegL1 = 71
  fromEnum SparcRegL2 = 72
  fromEnum SparcRegL3 = 73
  fromEnum SparcRegL4 = 74
  fromEnum SparcRegL5 = 75
  fromEnum SparcRegL6 = 76
  fromEnum SparcRegL7 = 77
  fromEnum SparcRegO0 = 78
  fromEnum SparcRegO1 = 79
  fromEnum SparcRegO2 = 80
  fromEnum SparcRegO3 = 81
  fromEnum SparcRegO4 = 82
  fromEnum SparcRegO5 = 83
  fromEnum SparcRegO7 = 84
  fromEnum SparcRegSp = 85
  fromEnum SparcRegO6 = 85
  fromEnum SparcRegY = 86
  fromEnum SparcRegXcc = 87
  fromEnum SparcRegEnding = 88

  toEnum 0 = SparcRegInvalid
  toEnum 1 = SparcRegF0
  toEnum 2 = SparcRegF1
  toEnum 3 = SparcRegF2
  toEnum 4 = SparcRegF3
  toEnum 5 = SparcRegF4
  toEnum 6 = SparcRegF5
  toEnum 7 = SparcRegF6
  toEnum 8 = SparcRegF7
  toEnum 9 = SparcRegF8
  toEnum 10 = SparcRegF9
  toEnum 11 = SparcRegF10
  toEnum 12 = SparcRegF11
  toEnum 13 = SparcRegF12
  toEnum 14 = SparcRegF13
  toEnum 15 = SparcRegF14
  toEnum 16 = SparcRegF15
  toEnum 17 = SparcRegF16
  toEnum 18 = SparcRegF17
  toEnum 19 = SparcRegF18
  toEnum 20 = SparcRegF19
  toEnum 21 = SparcRegF20
  toEnum 22 = SparcRegF21
  toEnum 23 = SparcRegF22
  toEnum 24 = SparcRegF23
  toEnum 25 = SparcRegF24
  toEnum 26 = SparcRegF25
  toEnum 27 = SparcRegF26
  toEnum 28 = SparcRegF27
  toEnum 29 = SparcRegF28
  toEnum 30 = SparcRegF29
  toEnum 31 = SparcRegF30
  toEnum 32 = SparcRegF31
  toEnum 33 = SparcRegF32
  toEnum 34 = SparcRegF34
  toEnum 35 = SparcRegF36
  toEnum 36 = SparcRegF38
  toEnum 37 = SparcRegF40
  toEnum 38 = SparcRegF42
  toEnum 39 = SparcRegF44
  toEnum 40 = SparcRegF46
  toEnum 41 = SparcRegF48
  toEnum 42 = SparcRegF50
  toEnum 43 = SparcRegF52
  toEnum 44 = SparcRegF54
  toEnum 45 = SparcRegF56
  toEnum 46 = SparcRegF58
  toEnum 47 = SparcRegF60
  toEnum 48 = SparcRegF62
  toEnum 49 = SparcRegFcc0
  toEnum 50 = SparcRegFcc1
  toEnum 51 = SparcRegFcc2
  toEnum 52 = SparcRegFcc3
  toEnum 53 = SparcRegFp
  toEnum 54 = SparcRegG0
  toEnum 55 = SparcRegG1
  toEnum 56 = SparcRegG2
  toEnum 57 = SparcRegG3
  toEnum 58 = SparcRegG4
  toEnum 59 = SparcRegG5
  toEnum 60 = SparcRegG6
  toEnum 61 = SparcRegG7
  toEnum 62 = SparcRegI0
  toEnum 63 = SparcRegI1
  toEnum 64 = SparcRegI2
  toEnum 65 = SparcRegI3
  toEnum 66 = SparcRegI4
  toEnum 67 = SparcRegI5
  toEnum 68 = SparcRegI7
  toEnum 69 = SparcRegIcc
  toEnum 70 = SparcRegL0
  toEnum 71 = SparcRegL1
  toEnum 72 = SparcRegL2
  toEnum 73 = SparcRegL3
  toEnum 74 = SparcRegL4
  toEnum 75 = SparcRegL5
  toEnum 76 = SparcRegL6
  toEnum 77 = SparcRegL7
  toEnum 78 = SparcRegO0
  toEnum 79 = SparcRegO1
  toEnum 80 = SparcRegO2
  toEnum 81 = SparcRegO3
  toEnum 82 = SparcRegO4
  toEnum 83 = SparcRegO5
  toEnum 84 = SparcRegO7
  toEnum 85 = SparcRegSp
  toEnum 86 = SparcRegY
  toEnum 87 = SparcRegXcc
  toEnum 88 = SparcRegEnding
  toEnum unmatched = error ("SparcReg.toEnum: Cannot match " ++ show unmatched)

{-# LINE 43 "src/Hapstone/Internal/Sparc.chs" #-}


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

instance Storable SparcOpMemStruct where
    sizeOf _ = 8
{-# LINE 54 "src/Hapstone/Internal/Sparc.chs" #-}

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

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

-- | instruction operand
data CsSparcOp
    = Reg Word32 -- ^ register value for 'SparcOpReg' operands
    | Imm Int32 -- ^ immediate value for 'SparcOpImm' operands
    | Mem SparcOpMemStruct -- ^ base,index,disp value for 'SparcOpMem' operands
    | Undefined -- ^ invalid operand value, for 'SparcOpInvalid' operand
    deriving (Show, Eq)

instance Storable CsSparcOp where
    sizeOf _ = 12
    alignment _ = 4
    peek p = do
        t <- fromIntegral <$> ((\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p :: IO CInt)
        let bP = plusPtr p 4
        case toEnum t of
          SparcOpReg -> Reg <$> peek bP
          SparcOpImm -> Imm <$> peek bP
          SparcOpMem -> Mem <$> peek bP
          _ -> return Undefined
    poke p op = do
        let bP = plusPtr p 4
            setType = (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CInt)}) p . fromIntegral . fromEnum
        case op of
          Reg r -> do
              poke bP (fromIntegral $ fromEnum r :: CInt)
              setType SparcOpReg
          Imm i -> do
              poke bP i
              setType SparcOpImm
          Mem m -> do
              poke bP m
              setType SparcOpMem
          _ -> setType SparcOpInvalid

-- | instruction datatype
data CsSparc = CsSparc
    { cc :: SparcCc -- ^ condition code
    , hint :: SparcHint -- ^ branch hint
    , operands :: [CsSparcOp] -- ^ operand list of this instruction, *MUST*
                              -- have <= 4 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 CsSparc where
    sizeOf _ = 60
    alignment _ = 4
    peek p = CsSparc
        <$> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 0 :: IO C2HSImp.CInt}) p)
        <*> ((toEnum . fromIntegral) <$> (\ptr -> do {C2HSImp.peekByteOff ptr 4 :: IO C2HSImp.CInt}) p)
        <*> do num <- fromIntegral <$> (\ptr -> do {C2HSImp.peekByteOff ptr 8 :: IO C2HSImp.CUChar}) p
               let ptr = plusPtr p (12)
{-# LINE 116 "src/Hapstone/Internal/Sparc.chs" #-}

               peekArray num ptr
    poke p (CsSparc cc h o) = do
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 0 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum cc)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 4 (val :: C2HSImp.CInt)}) p (fromIntegral $ fromEnum h)
        (\ptr val -> do {C2HSImp.pokeByteOff ptr 8 (val :: C2HSImp.CUChar)}) p (fromIntegral $ length o)
        if length o > 4
           then error "operands overflew 4 elements"
           else pokeArray (plusPtr p (12)) o

-- | SPARC instructions
data SparcInsn = SparcInsInvalid
               | SparcInsAddcc
               | SparcInsAddx
               | SparcInsAddxcc
               | SparcInsAddxc
               | SparcInsAddxccc
               | SparcInsAdd
               | SparcInsAlignaddr
               | SparcInsAlignaddrl
               | SparcInsAndcc
               | SparcInsAndncc
               | SparcInsAndn
               | SparcInsAnd
               | SparcInsArray16
               | SparcInsArray32
               | SparcInsArray8
               | SparcInsB
               | SparcInsJmp
               | SparcInsBmask
               | SparcInsFb
               | SparcInsBrgez
               | SparcInsBrgz
               | SparcInsBrlez
               | SparcInsBrlz
               | SparcInsBrnz
               | SparcInsBrz
               | SparcInsBshuffle
               | SparcInsCall
               | SparcInsCasx
               | SparcInsCas
               | SparcInsCmask16
               | SparcInsCmask32
               | SparcInsCmask8
               | SparcInsCmp
               | SparcInsEdge16
               | SparcInsEdge16l
               | SparcInsEdge16ln
               | SparcInsEdge16n
               | SparcInsEdge32
               | SparcInsEdge32l
               | SparcInsEdge32ln
               | SparcInsEdge32n
               | SparcInsEdge8
               | SparcInsEdge8l
               | SparcInsEdge8ln
               | SparcInsEdge8n
               | SparcInsFabsd
               | SparcInsFabsq
               | SparcInsFabss
               | SparcInsFaddd
               | SparcInsFaddq
               | SparcInsFadds
               | SparcInsFaligndata
               | SparcInsFand
               | SparcInsFandnot1
               | SparcInsFandnot1s
               | SparcInsFandnot2
               | SparcInsFandnot2s
               | SparcInsFands
               | SparcInsFchksm16
               | SparcInsFcmpd
               | SparcInsFcmpeq16
               | SparcInsFcmpeq32
               | SparcInsFcmpgt16
               | SparcInsFcmpgt32
               | SparcInsFcmple16
               | SparcInsFcmple32
               | SparcInsFcmpne16
               | SparcInsFcmpne32
               | SparcInsFcmpq
               | SparcInsFcmps
               | SparcInsFdivd
               | SparcInsFdivq
               | SparcInsFdivs
               | SparcInsFdmulq
               | SparcInsFdtoi
               | SparcInsFdtoq
               | SparcInsFdtos
               | SparcInsFdtox
               | SparcInsFexpand
               | SparcInsFhaddd
               | SparcInsFhadds
               | SparcInsFhsubd
               | SparcInsFhsubs
               | SparcInsFitod
               | SparcInsFitoq
               | SparcInsFitos
               | SparcInsFlcmpd
               | SparcInsFlcmps
               | SparcInsFlushw
               | SparcInsFmean16
               | SparcInsFmovd
               | SparcInsFmovq
               | SparcInsFmovrdgez
               | SparcInsFmovrqgez
               | SparcInsFmovrsgez
               | SparcInsFmovrdgz
               | SparcInsFmovrqgz
               | SparcInsFmovrsgz
               | SparcInsFmovrdlez
               | SparcInsFmovrqlez
               | SparcInsFmovrslez
               | SparcInsFmovrdlz
               | SparcInsFmovrqlz
               | SparcInsFmovrslz
               | SparcInsFmovrdnz
               | SparcInsFmovrqnz
               | SparcInsFmovrsnz
               | SparcInsFmovrdz
               | SparcInsFmovrqz
               | SparcInsFmovrsz
               | SparcInsFmovs
               | SparcInsFmul8sux16
               | SparcInsFmul8ulx16
               | SparcInsFmul8x16
               | SparcInsFmul8x16al
               | SparcInsFmul8x16au
               | SparcInsFmuld
               | SparcInsFmuld8sux16
               | SparcInsFmuld8ulx16
               | SparcInsFmulq
               | SparcInsFmuls
               | SparcInsFnaddd
               | SparcInsFnadds
               | SparcInsFnand
               | SparcInsFnands
               | SparcInsFnegd
               | SparcInsFnegq
               | SparcInsFnegs
               | SparcInsFnhaddd
               | SparcInsFnhadds
               | SparcInsFnor
               | SparcInsFnors
               | SparcInsFnot1
               | SparcInsFnot1s
               | SparcInsFnot2
               | SparcInsFnot2s
               | SparcInsFone
               | SparcInsFones
               | SparcInsFor
               | SparcInsFornot1
               | SparcInsFornot1s
               | SparcInsFornot2
               | SparcInsFornot2s
               | SparcInsFors
               | SparcInsFpack16
               | SparcInsFpack32
               | SparcInsFpackfix
               | SparcInsFpadd16
               | SparcInsFpadd16s
               | SparcInsFpadd32
               | SparcInsFpadd32s
               | SparcInsFpadd64
               | SparcInsFpmerge
               | SparcInsFpsub16
               | SparcInsFpsub16s
               | SparcInsFpsub32
               | SparcInsFpsub32s
               | SparcInsFqtod
               | SparcInsFqtoi
               | SparcInsFqtos
               | SparcInsFqtox
               | SparcInsFslas16
               | SparcInsFslas32
               | SparcInsFsll16
               | SparcInsFsll32
               | SparcInsFsmuld
               | SparcInsFsqrtd
               | SparcInsFsqrtq
               | SparcInsFsqrts
               | SparcInsFsra16
               | SparcInsFsra32
               | SparcInsFsrc1
               | SparcInsFsrc1s
               | SparcInsFsrc2
               | SparcInsFsrc2s
               | SparcInsFsrl16
               | SparcInsFsrl32
               | SparcInsFstod
               | SparcInsFstoi
               | SparcInsFstoq
               | SparcInsFstox
               | SparcInsFsubd
               | SparcInsFsubq
               | SparcInsFsubs
               | SparcInsFxnor
               | SparcInsFxnors
               | SparcInsFxor
               | SparcInsFxors
               | SparcInsFxtod
               | SparcInsFxtoq
               | SparcInsFxtos
               | SparcInsFzero
               | SparcInsFzeros
               | SparcInsJmpl
               | SparcInsLdd
               | SparcInsLd
               | SparcInsLdq
               | SparcInsLdsb
               | SparcInsLdsh
               | SparcInsLdsw
               | SparcInsLdub
               | SparcInsLduh
               | SparcInsLdx
               | SparcInsLzcnt
               | SparcInsMembar
               | SparcInsMovdtox
               | SparcInsMov
               | SparcInsMovrgez
               | SparcInsMovrgz
               | SparcInsMovrlez
               | SparcInsMovrlz
               | SparcInsMovrnz
               | SparcInsMovrz
               | SparcInsMovstosw
               | SparcInsMovstouw
               | SparcInsMulx
               | SparcInsNop
               | SparcInsOrcc
               | SparcInsOrncc
               | SparcInsOrn
               | SparcInsOr
               | SparcInsPdist
               | SparcInsPdistn
               | SparcInsPopc
               | SparcInsRd
               | SparcInsRestore
               | SparcInsRett
               | SparcInsSave
               | SparcInsSdivcc
               | SparcInsSdivx
               | SparcInsSdiv
               | SparcInsSethi
               | SparcInsShutdown
               | SparcInsSiam
               | SparcInsSllx
               | SparcInsSll
               | SparcInsSmulcc
               | SparcInsSmul
               | SparcInsSrax
               | SparcInsSra
               | SparcInsSrlx
               | SparcInsSrl
               | SparcInsStbar
               | SparcInsStb
               | SparcInsStd
               | SparcInsSt
               | SparcInsSth
               | SparcInsStq
               | SparcInsStx
               | SparcInsSubcc
               | SparcInsSubx
               | SparcInsSubxcc
               | SparcInsSub
               | SparcInsSwap
               | SparcInsTaddcctv
               | SparcInsTaddcc
               | SparcInsT
               | SparcInsTsubcctv
               | SparcInsTsubcc
               | SparcInsUdivcc
               | SparcInsUdivx
               | SparcInsUdiv
               | SparcInsUmulcc
               | SparcInsUmulxhi
               | SparcInsUmul
               | SparcInsUnimp
               | SparcInsFcmped
               | SparcInsFcmpeq
               | SparcInsFcmpes
               | SparcInsWr
               | SparcInsXmulx
               | SparcInsXmulxhi
               | SparcInsXnorcc
               | SparcInsXnor
               | SparcInsXorcc
               | SparcInsXor
               | SparcInsRet
               | SparcInsRetl
               | SparcInsEnding
  deriving (Show,Eq,Bounded)
instance Enum SparcInsn where
  succ SparcInsInvalid = SparcInsAddcc
  succ SparcInsAddcc = SparcInsAddx
  succ SparcInsAddx = SparcInsAddxcc
  succ SparcInsAddxcc = SparcInsAddxc
  succ SparcInsAddxc = SparcInsAddxccc
  succ SparcInsAddxccc = SparcInsAdd
  succ SparcInsAdd = SparcInsAlignaddr
  succ SparcInsAlignaddr = SparcInsAlignaddrl
  succ SparcInsAlignaddrl = SparcInsAndcc
  succ SparcInsAndcc = SparcInsAndncc
  succ SparcInsAndncc = SparcInsAndn
  succ SparcInsAndn = SparcInsAnd
  succ SparcInsAnd = SparcInsArray16
  succ SparcInsArray16 = SparcInsArray32
  succ SparcInsArray32 = SparcInsArray8
  succ SparcInsArray8 = SparcInsB
  succ SparcInsB = SparcInsJmp
  succ SparcInsJmp = SparcInsBmask
  succ SparcInsBmask = SparcInsFb
  succ SparcInsFb = SparcInsBrgez
  succ SparcInsBrgez = SparcInsBrgz
  succ SparcInsBrgz = SparcInsBrlez
  succ SparcInsBrlez = SparcInsBrlz
  succ SparcInsBrlz = SparcInsBrnz
  succ SparcInsBrnz = SparcInsBrz
  succ SparcInsBrz = SparcInsBshuffle
  succ SparcInsBshuffle = SparcInsCall
  succ SparcInsCall = SparcInsCasx
  succ SparcInsCasx = SparcInsCas
  succ SparcInsCas = SparcInsCmask16
  succ SparcInsCmask16 = SparcInsCmask32
  succ SparcInsCmask32 = SparcInsCmask8
  succ SparcInsCmask8 = SparcInsCmp
  succ SparcInsCmp = SparcInsEdge16
  succ SparcInsEdge16 = SparcInsEdge16l
  succ SparcInsEdge16l = SparcInsEdge16ln
  succ SparcInsEdge16ln = SparcInsEdge16n
  succ SparcInsEdge16n = SparcInsEdge32
  succ SparcInsEdge32 = SparcInsEdge32l
  succ SparcInsEdge32l = SparcInsEdge32ln
  succ SparcInsEdge32ln = SparcInsEdge32n
  succ SparcInsEdge32n = SparcInsEdge8
  succ SparcInsEdge8 = SparcInsEdge8l
  succ SparcInsEdge8l = SparcInsEdge8ln
  succ SparcInsEdge8ln = SparcInsEdge8n
  succ SparcInsEdge8n = SparcInsFabsd
  succ SparcInsFabsd = SparcInsFabsq
  succ SparcInsFabsq = SparcInsFabss
  succ SparcInsFabss = SparcInsFaddd
  succ SparcInsFaddd = SparcInsFaddq
  succ SparcInsFaddq = SparcInsFadds
  succ SparcInsFadds = SparcInsFaligndata
  succ SparcInsFaligndata = SparcInsFand
  succ SparcInsFand = SparcInsFandnot1
  succ SparcInsFandnot1 = SparcInsFandnot1s
  succ SparcInsFandnot1s = SparcInsFandnot2
  succ SparcInsFandnot2 = SparcInsFandnot2s
  succ SparcInsFandnot2s = SparcInsFands
  succ SparcInsFands = SparcInsFchksm16
  succ SparcInsFchksm16 = SparcInsFcmpd
  succ SparcInsFcmpd = SparcInsFcmpeq16
  succ SparcInsFcmpeq16 = SparcInsFcmpeq32
  succ SparcInsFcmpeq32 = SparcInsFcmpgt16
  succ SparcInsFcmpgt16 = SparcInsFcmpgt32
  succ SparcInsFcmpgt32 = SparcInsFcmple16
  succ SparcInsFcmple16 = SparcInsFcmple32
  succ SparcInsFcmple32 = SparcInsFcmpne16
  succ SparcInsFcmpne16 = SparcInsFcmpne32
  succ SparcInsFcmpne32 = SparcInsFcmpq
  succ SparcInsFcmpq = SparcInsFcmps
  succ SparcInsFcmps = SparcInsFdivd
  succ SparcInsFdivd = SparcInsFdivq
  succ SparcInsFdivq = SparcInsFdivs
  succ SparcInsFdivs = SparcInsFdmulq
  succ SparcInsFdmulq = SparcInsFdtoi
  succ SparcInsFdtoi = SparcInsFdtoq
  succ SparcInsFdtoq = SparcInsFdtos
  succ SparcInsFdtos = SparcInsFdtox
  succ SparcInsFdtox = SparcInsFexpand
  succ SparcInsFexpand = SparcInsFhaddd
  succ SparcInsFhaddd = SparcInsFhadds
  succ SparcInsFhadds = SparcInsFhsubd
  succ SparcInsFhsubd = SparcInsFhsubs
  succ SparcInsFhsubs = SparcInsFitod
  succ SparcInsFitod = SparcInsFitoq
  succ SparcInsFitoq = SparcInsFitos
  succ SparcInsFitos = SparcInsFlcmpd
  succ SparcInsFlcmpd = SparcInsFlcmps
  succ SparcInsFlcmps = SparcInsFlushw
  succ SparcInsFlushw = SparcInsFmean16
  succ SparcInsFmean16 = SparcInsFmovd
  succ SparcInsFmovd = SparcInsFmovq
  succ SparcInsFmovq = SparcInsFmovrdgez
  succ SparcInsFmovrdgez = SparcInsFmovrqgez
  succ SparcInsFmovrqgez = SparcInsFmovrsgez
  succ SparcInsFmovrsgez = SparcInsFmovrdgz
  succ SparcInsFmovrdgz = SparcInsFmovrqgz
  succ SparcInsFmovrqgz = SparcInsFmovrsgz
  succ SparcInsFmovrsgz = SparcInsFmovrdlez
  succ SparcInsFmovrdlez = SparcInsFmovrqlez
  succ SparcInsFmovrqlez = SparcInsFmovrslez
  succ SparcInsFmovrslez = SparcInsFmovrdlz
  succ SparcInsFmovrdlz = SparcInsFmovrqlz
  succ SparcInsFmovrqlz = SparcInsFmovrslz
  succ SparcInsFmovrslz = SparcInsFmovrdnz
  succ SparcInsFmovrdnz = SparcInsFmovrqnz
  succ SparcInsFmovrqnz = SparcInsFmovrsnz
  succ SparcInsFmovrsnz = SparcInsFmovrdz
  succ SparcInsFmovrdz = SparcInsFmovrqz
  succ SparcInsFmovrqz = SparcInsFmovrsz
  succ SparcInsFmovrsz = SparcInsFmovs
  succ SparcInsFmovs = SparcInsFmul8sux16
  succ SparcInsFmul8sux16 = SparcInsFmul8ulx16
  succ SparcInsFmul8ulx16 = SparcInsFmul8x16
  succ SparcInsFmul8x16 = SparcInsFmul8x16al
  succ SparcInsFmul8x16al = SparcInsFmul8x16au
  succ SparcInsFmul8x16au = SparcInsFmuld
  succ SparcInsFmuld = SparcInsFmuld8sux16
  succ SparcInsFmuld8sux16 = SparcInsFmuld8ulx16
  succ SparcInsFmuld8ulx16 = SparcInsFmulq
  succ SparcInsFmulq = SparcInsFmuls
  succ SparcInsFmuls = SparcInsFnaddd
  succ SparcInsFnaddd = SparcInsFnadds
  succ SparcInsFnadds = SparcInsFnand
  succ SparcInsFnand = SparcInsFnands
  succ SparcInsFnands = SparcInsFnegd
  succ SparcInsFnegd = SparcInsFnegq
  succ SparcInsFnegq = SparcInsFnegs
  succ SparcInsFnegs = SparcInsFnhaddd
  succ SparcInsFnhaddd = SparcInsFnhadds
  succ SparcInsFnhadds = SparcInsFnor
  succ SparcInsFnor = SparcInsFnors
  succ SparcInsFnors = SparcInsFnot1
  succ SparcInsFnot1 = SparcInsFnot1s
  succ SparcInsFnot1s = SparcInsFnot2
  succ SparcInsFnot2 = SparcInsFnot2s
  succ SparcInsFnot2s = SparcInsFone
  succ SparcInsFone = SparcInsFones
  succ SparcInsFones = SparcInsFor
  succ SparcInsFor = SparcInsFornot1
  succ SparcInsFornot1 = SparcInsFornot1s
  succ SparcInsFornot1s = SparcInsFornot2
  succ SparcInsFornot2 = SparcInsFornot2s
  succ SparcInsFornot2s = SparcInsFors
  succ SparcInsFors = SparcInsFpack16
  succ SparcInsFpack16 = SparcInsFpack32
  succ SparcInsFpack32 = SparcInsFpackfix
  succ SparcInsFpackfix = SparcInsFpadd16
  succ SparcInsFpadd16 = SparcInsFpadd16s
  succ SparcInsFpadd16s = SparcInsFpadd32
  succ SparcInsFpadd32 = SparcInsFpadd32s
  succ SparcInsFpadd32s = SparcInsFpadd64
  succ SparcInsFpadd64 = SparcInsFpmerge
  succ SparcInsFpmerge = SparcInsFpsub16
  succ SparcInsFpsub16 = SparcInsFpsub16s
  succ SparcInsFpsub16s = SparcInsFpsub32
  succ SparcInsFpsub32 = SparcInsFpsub32s
  succ SparcInsFpsub32s = SparcInsFqtod
  succ SparcInsFqtod = SparcInsFqtoi
  succ SparcInsFqtoi = SparcInsFqtos
  succ SparcInsFqtos = SparcInsFqtox
  succ SparcInsFqtox = SparcInsFslas16
  succ SparcInsFslas16 = SparcInsFslas32
  succ SparcInsFslas32 = SparcInsFsll16
  succ SparcInsFsll16 = SparcInsFsll32
  succ SparcInsFsll32 = SparcInsFsmuld
  succ SparcInsFsmuld = SparcInsFsqrtd
  succ SparcInsFsqrtd = SparcInsFsqrtq
  succ SparcInsFsqrtq = SparcInsFsqrts
  succ SparcInsFsqrts = SparcInsFsra16
  succ SparcInsFsra16 = SparcInsFsra32
  succ SparcInsFsra32 = SparcInsFsrc1
  succ SparcInsFsrc1 = SparcInsFsrc1s
  succ SparcInsFsrc1s = SparcInsFsrc2
  succ SparcInsFsrc2 = SparcInsFsrc2s
  succ SparcInsFsrc2s = SparcInsFsrl16
  succ SparcInsFsrl16 = SparcInsFsrl32
  succ SparcInsFsrl32 = SparcInsFstod
  succ SparcInsFstod = SparcInsFstoi
  succ SparcInsFstoi = SparcInsFstoq
  succ SparcInsFstoq = SparcInsFstox
  succ SparcInsFstox = SparcInsFsubd
  succ SparcInsFsubd = SparcInsFsubq
  succ SparcInsFsubq = SparcInsFsubs
  succ SparcInsFsubs = SparcInsFxnor
  succ SparcInsFxnor = SparcInsFxnors
  succ SparcInsFxnors = SparcInsFxor
  succ SparcInsFxor = SparcInsFxors
  succ SparcInsFxors = SparcInsFxtod
  succ SparcInsFxtod = SparcInsFxtoq
  succ SparcInsFxtoq = SparcInsFxtos
  succ SparcInsFxtos = SparcInsFzero
  succ SparcInsFzero = SparcInsFzeros
  succ SparcInsFzeros = SparcInsJmpl
  succ SparcInsJmpl = SparcInsLdd
  succ SparcInsLdd = SparcInsLd
  succ SparcInsLd = SparcInsLdq
  succ SparcInsLdq = SparcInsLdsb
  succ SparcInsLdsb = SparcInsLdsh
  succ SparcInsLdsh = SparcInsLdsw
  succ SparcInsLdsw = SparcInsLdub
  succ SparcInsLdub = SparcInsLduh
  succ SparcInsLduh = SparcInsLdx
  succ SparcInsLdx = SparcInsLzcnt
  succ SparcInsLzcnt = SparcInsMembar
  succ SparcInsMembar = SparcInsMovdtox
  succ SparcInsMovdtox = SparcInsMov
  succ SparcInsMov = SparcInsMovrgez
  succ SparcInsMovrgez = SparcInsMovrgz
  succ SparcInsMovrgz = SparcInsMovrlez
  succ SparcInsMovrlez = SparcInsMovrlz
  succ SparcInsMovrlz = SparcInsMovrnz
  succ SparcInsMovrnz = SparcInsMovrz
  succ SparcInsMovrz = SparcInsMovstosw
  succ SparcInsMovstosw = SparcInsMovstouw
  succ SparcInsMovstouw = SparcInsMulx
  succ SparcInsMulx = SparcInsNop
  succ SparcInsNop = SparcInsOrcc
  succ SparcInsOrcc = SparcInsOrncc
  succ SparcInsOrncc = SparcInsOrn
  succ SparcInsOrn = SparcInsOr
  succ SparcInsOr = SparcInsPdist
  succ SparcInsPdist = SparcInsPdistn
  succ SparcInsPdistn = SparcInsPopc
  succ SparcInsPopc = SparcInsRd
  succ SparcInsRd = SparcInsRestore
  succ SparcInsRestore = SparcInsRett
  succ SparcInsRett = SparcInsSave
  succ SparcInsSave = SparcInsSdivcc
  succ SparcInsSdivcc = SparcInsSdivx
  succ SparcInsSdivx = SparcInsSdiv
  succ SparcInsSdiv = SparcInsSethi
  succ SparcInsSethi = SparcInsShutdown
  succ SparcInsShutdown = SparcInsSiam
  succ SparcInsSiam = SparcInsSllx
  succ SparcInsSllx = SparcInsSll
  succ SparcInsSll = SparcInsSmulcc
  succ SparcInsSmulcc = SparcInsSmul
  succ SparcInsSmul = SparcInsSrax
  succ SparcInsSrax = SparcInsSra
  succ SparcInsSra = SparcInsSrlx
  succ SparcInsSrlx = SparcInsSrl
  succ SparcInsSrl = SparcInsStbar
  succ SparcInsStbar = SparcInsStb
  succ SparcInsStb = SparcInsStd
  succ SparcInsStd = SparcInsSt
  succ SparcInsSt = SparcInsSth
  succ SparcInsSth = SparcInsStq
  succ SparcInsStq = SparcInsStx
  succ SparcInsStx = SparcInsSubcc
  succ SparcInsSubcc = SparcInsSubx
  succ SparcInsSubx = SparcInsSubxcc
  succ SparcInsSubxcc = SparcInsSub
  succ SparcInsSub = SparcInsSwap
  succ SparcInsSwap = SparcInsTaddcctv
  succ SparcInsTaddcctv = SparcInsTaddcc
  succ SparcInsTaddcc = SparcInsT
  succ SparcInsT = SparcInsTsubcctv
  succ SparcInsTsubcctv = SparcInsTsubcc
  succ SparcInsTsubcc = SparcInsUdivcc
  succ SparcInsUdivcc = SparcInsUdivx
  succ SparcInsUdivx = SparcInsUdiv
  succ SparcInsUdiv = SparcInsUmulcc
  succ SparcInsUmulcc = SparcInsUmulxhi
  succ SparcInsUmulxhi = SparcInsUmul
  succ SparcInsUmul = SparcInsUnimp
  succ SparcInsUnimp = SparcInsFcmped
  succ SparcInsFcmped = SparcInsFcmpeq
  succ SparcInsFcmpeq = SparcInsFcmpes
  succ SparcInsFcmpes = SparcInsWr
  succ SparcInsWr = SparcInsXmulx
  succ SparcInsXmulx = SparcInsXmulxhi
  succ SparcInsXmulxhi = SparcInsXnorcc
  succ SparcInsXnorcc = SparcInsXnor
  succ SparcInsXnor = SparcInsXorcc
  succ SparcInsXorcc = SparcInsXor
  succ SparcInsXor = SparcInsRet
  succ SparcInsRet = SparcInsRetl
  succ SparcInsRetl = SparcInsEnding
  succ SparcInsEnding = error "SparcInsn.succ: SparcInsEnding has no successor"

  pred SparcInsAddcc = SparcInsInvalid
  pred SparcInsAddx = SparcInsAddcc
  pred SparcInsAddxcc = SparcInsAddx
  pred SparcInsAddxc = SparcInsAddxcc
  pred SparcInsAddxccc = SparcInsAddxc
  pred SparcInsAdd = SparcInsAddxccc
  pred SparcInsAlignaddr = SparcInsAdd
  pred SparcInsAlignaddrl = SparcInsAlignaddr
  pred SparcInsAndcc = SparcInsAlignaddrl
  pred SparcInsAndncc = SparcInsAndcc
  pred SparcInsAndn = SparcInsAndncc
  pred SparcInsAnd = SparcInsAndn
  pred SparcInsArray16 = SparcInsAnd
  pred SparcInsArray32 = SparcInsArray16
  pred SparcInsArray8 = SparcInsArray32
  pred SparcInsB = SparcInsArray8
  pred SparcInsJmp = SparcInsB
  pred SparcInsBmask = SparcInsJmp
  pred SparcInsFb = SparcInsBmask
  pred SparcInsBrgez = SparcInsFb
  pred SparcInsBrgz = SparcInsBrgez
  pred SparcInsBrlez = SparcInsBrgz
  pred SparcInsBrlz = SparcInsBrlez
  pred SparcInsBrnz = SparcInsBrlz
  pred SparcInsBrz = SparcInsBrnz
  pred SparcInsBshuffle = SparcInsBrz
  pred SparcInsCall = SparcInsBshuffle
  pred SparcInsCasx = SparcInsCall
  pred SparcInsCas = SparcInsCasx
  pred SparcInsCmask16 = SparcInsCas
  pred SparcInsCmask32 = SparcInsCmask16
  pred SparcInsCmask8 = SparcInsCmask32
  pred SparcInsCmp = SparcInsCmask8
  pred SparcInsEdge16 = SparcInsCmp
  pred SparcInsEdge16l = SparcInsEdge16
  pred SparcInsEdge16ln = SparcInsEdge16l
  pred SparcInsEdge16n = SparcInsEdge16ln
  pred SparcInsEdge32 = SparcInsEdge16n
  pred SparcInsEdge32l = SparcInsEdge32
  pred SparcInsEdge32ln = SparcInsEdge32l
  pred SparcInsEdge32n = SparcInsEdge32ln
  pred SparcInsEdge8 = SparcInsEdge32n
  pred SparcInsEdge8l = SparcInsEdge8
  pred SparcInsEdge8ln = SparcInsEdge8l
  pred SparcInsEdge8n = SparcInsEdge8ln
  pred SparcInsFabsd = SparcInsEdge8n
  pred SparcInsFabsq = SparcInsFabsd
  pred SparcInsFabss = SparcInsFabsq
  pred SparcInsFaddd = SparcInsFabss
  pred SparcInsFaddq = SparcInsFaddd
  pred SparcInsFadds = SparcInsFaddq
  pred SparcInsFaligndata = SparcInsFadds
  pred SparcInsFand = SparcInsFaligndata
  pred SparcInsFandnot1 = SparcInsFand
  pred SparcInsFandnot1s = SparcInsFandnot1
  pred SparcInsFandnot2 = SparcInsFandnot1s
  pred SparcInsFandnot2s = SparcInsFandnot2
  pred SparcInsFands = SparcInsFandnot2s
  pred SparcInsFchksm16 = SparcInsFands
  pred SparcInsFcmpd = SparcInsFchksm16
  pred SparcInsFcmpeq16 = SparcInsFcmpd
  pred SparcInsFcmpeq32 = SparcInsFcmpeq16
  pred SparcInsFcmpgt16 = SparcInsFcmpeq32
  pred SparcInsFcmpgt32 = SparcInsFcmpgt16
  pred SparcInsFcmple16 = SparcInsFcmpgt32
  pred SparcInsFcmple32 = SparcInsFcmple16
  pred SparcInsFcmpne16 = SparcInsFcmple32
  pred SparcInsFcmpne32 = SparcInsFcmpne16
  pred SparcInsFcmpq = SparcInsFcmpne32
  pred SparcInsFcmps = SparcInsFcmpq
  pred SparcInsFdivd = SparcInsFcmps
  pred SparcInsFdivq = SparcInsFdivd
  pred SparcInsFdivs = SparcInsFdivq
  pred SparcInsFdmulq = SparcInsFdivs
  pred SparcInsFdtoi = SparcInsFdmulq
  pred SparcInsFdtoq = SparcInsFdtoi
  pred SparcInsFdtos = SparcInsFdtoq
  pred SparcInsFdtox = SparcInsFdtos
  pred SparcInsFexpand = SparcInsFdtox
  pred SparcInsFhaddd = SparcInsFexpand
  pred SparcInsFhadds = SparcInsFhaddd
  pred SparcInsFhsubd = SparcInsFhadds
  pred SparcInsFhsubs = SparcInsFhsubd
  pred SparcInsFitod = SparcInsFhsubs
  pred SparcInsFitoq = SparcInsFitod
  pred SparcInsFitos = SparcInsFitoq
  pred SparcInsFlcmpd = SparcInsFitos
  pred SparcInsFlcmps = SparcInsFlcmpd
  pred SparcInsFlushw = SparcInsFlcmps
  pred SparcInsFmean16 = SparcInsFlushw
  pred SparcInsFmovd = SparcInsFmean16
  pred SparcInsFmovq = SparcInsFmovd
  pred SparcInsFmovrdgez = SparcInsFmovq
  pred SparcInsFmovrqgez = SparcInsFmovrdgez
  pred SparcInsFmovrsgez = SparcInsFmovrqgez
  pred SparcInsFmovrdgz = SparcInsFmovrsgez
  pred SparcInsFmovrqgz = SparcInsFmovrdgz
  pred SparcInsFmovrsgz = SparcInsFmovrqgz
  pred SparcInsFmovrdlez = SparcInsFmovrsgz
  pred SparcInsFmovrqlez = SparcInsFmovrdlez
  pred SparcInsFmovrslez = SparcInsFmovrqlez
  pred SparcInsFmovrdlz = SparcInsFmovrslez
  pred SparcInsFmovrqlz = SparcInsFmovrdlz
  pred SparcInsFmovrslz = SparcInsFmovrqlz
  pred SparcInsFmovrdnz = SparcInsFmovrslz
  pred SparcInsFmovrqnz = SparcInsFmovrdnz
  pred SparcInsFmovrsnz = SparcInsFmovrqnz
  pred SparcInsFmovrdz = SparcInsFmovrsnz
  pred SparcInsFmovrqz = SparcInsFmovrdz
  pred SparcInsFmovrsz = SparcInsFmovrqz
  pred SparcInsFmovs = SparcInsFmovrsz
  pred SparcInsFmul8sux16 = SparcInsFmovs
  pred SparcInsFmul8ulx16 = SparcInsFmul8sux16
  pred SparcInsFmul8x16 = SparcInsFmul8ulx16
  pred SparcInsFmul8x16al = SparcInsFmul8x16
  pred SparcInsFmul8x16au = SparcInsFmul8x16al
  pred SparcInsFmuld = SparcInsFmul8x16au
  pred SparcInsFmuld8sux16 = SparcInsFmuld
  pred SparcInsFmuld8ulx16 = SparcInsFmuld8sux16
  pred SparcInsFmulq = SparcInsFmuld8ulx16
  pred SparcInsFmuls = SparcInsFmulq
  pred SparcInsFnaddd = SparcInsFmuls
  pred SparcInsFnadds = SparcInsFnaddd
  pred SparcInsFnand = SparcInsFnadds
  pred SparcInsFnands = SparcInsFnand
  pred SparcInsFnegd = SparcInsFnands
  pred SparcInsFnegq = SparcInsFnegd
  pred SparcInsFnegs = SparcInsFnegq
  pred SparcInsFnhaddd = SparcInsFnegs
  pred SparcInsFnhadds = SparcInsFnhaddd
  pred SparcInsFnor = SparcInsFnhadds
  pred SparcInsFnors = SparcInsFnor
  pred SparcInsFnot1 = SparcInsFnors
  pred SparcInsFnot1s = SparcInsFnot1
  pred SparcInsFnot2 = SparcInsFnot1s
  pred SparcInsFnot2s = SparcInsFnot2
  pred SparcInsFone = SparcInsFnot2s
  pred SparcInsFones = SparcInsFone
  pred SparcInsFor = SparcInsFones
  pred SparcInsFornot1 = SparcInsFor
  pred SparcInsFornot1s = SparcInsFornot1
  pred SparcInsFornot2 = SparcInsFornot1s
  pred SparcInsFornot2s = SparcInsFornot2
  pred SparcInsFors = SparcInsFornot2s
  pred SparcInsFpack16 = SparcInsFors
  pred SparcInsFpack32 = SparcInsFpack16
  pred SparcInsFpackfix = SparcInsFpack32
  pred SparcInsFpadd16 = SparcInsFpackfix
  pred SparcInsFpadd16s = SparcInsFpadd16
  pred SparcInsFpadd32 = SparcInsFpadd16s
  pred SparcInsFpadd32s = SparcInsFpadd32
  pred SparcInsFpadd64 = SparcInsFpadd32s
  pred SparcInsFpmerge = SparcInsFpadd64
  pred SparcInsFpsub16 = SparcInsFpmerge
  pred SparcInsFpsub16s = SparcInsFpsub16
  pred SparcInsFpsub32 = SparcInsFpsub16s
  pred SparcInsFpsub32s = SparcInsFpsub32
  pred SparcInsFqtod = SparcInsFpsub32s
  pred SparcInsFqtoi = SparcInsFqtod
  pred SparcInsFqtos = SparcInsFqtoi
  pred SparcInsFqtox = SparcInsFqtos
  pred SparcInsFslas16 = SparcInsFqtox
  pred SparcInsFslas32 = SparcInsFslas16
  pred SparcInsFsll16 = SparcInsFslas32
  pred SparcInsFsll32 = SparcInsFsll16
  pred SparcInsFsmuld = SparcInsFsll32
  pred SparcInsFsqrtd = SparcInsFsmuld
  pred SparcInsFsqrtq = SparcInsFsqrtd
  pred SparcInsFsqrts = SparcInsFsqrtq
  pred SparcInsFsra16 = SparcInsFsqrts
  pred SparcInsFsra32 = SparcInsFsra16
  pred SparcInsFsrc1 = SparcInsFsra32
  pred SparcInsFsrc1s = SparcInsFsrc1
  pred SparcInsFsrc2 = SparcInsFsrc1s
  pred SparcInsFsrc2s = SparcInsFsrc2
  pred SparcInsFsrl16 = SparcInsFsrc2s
  pred SparcInsFsrl32 = SparcInsFsrl16
  pred SparcInsFstod = SparcInsFsrl32
  pred SparcInsFstoi = SparcInsFstod
  pred SparcInsFstoq = SparcInsFstoi
  pred SparcInsFstox = SparcInsFstoq
  pred SparcInsFsubd = SparcInsFstox
  pred SparcInsFsubq = SparcInsFsubd
  pred SparcInsFsubs = SparcInsFsubq
  pred SparcInsFxnor = SparcInsFsubs
  pred SparcInsFxnors = SparcInsFxnor
  pred SparcInsFxor = SparcInsFxnors
  pred SparcInsFxors = SparcInsFxor
  pred SparcInsFxtod = SparcInsFxors
  pred SparcInsFxtoq = SparcInsFxtod
  pred SparcInsFxtos = SparcInsFxtoq
  pred SparcInsFzero = SparcInsFxtos
  pred SparcInsFzeros = SparcInsFzero
  pred SparcInsJmpl = SparcInsFzeros
  pred SparcInsLdd = SparcInsJmpl
  pred SparcInsLd = SparcInsLdd
  pred SparcInsLdq = SparcInsLd
  pred SparcInsLdsb = SparcInsLdq
  pred SparcInsLdsh = SparcInsLdsb
  pred SparcInsLdsw = SparcInsLdsh
  pred SparcInsLdub = SparcInsLdsw
  pred SparcInsLduh = SparcInsLdub
  pred SparcInsLdx = SparcInsLduh
  pred SparcInsLzcnt = SparcInsLdx
  pred SparcInsMembar = SparcInsLzcnt
  pred SparcInsMovdtox = SparcInsMembar
  pred SparcInsMov = SparcInsMovdtox
  pred SparcInsMovrgez = SparcInsMov
  pred SparcInsMovrgz = SparcInsMovrgez
  pred SparcInsMovrlez = SparcInsMovrgz
  pred SparcInsMovrlz = SparcInsMovrlez
  pred SparcInsMovrnz = SparcInsMovrlz
  pred SparcInsMovrz = SparcInsMovrnz
  pred SparcInsMovstosw = SparcInsMovrz
  pred SparcInsMovstouw = SparcInsMovstosw
  pred SparcInsMulx = SparcInsMovstouw
  pred SparcInsNop = SparcInsMulx
  pred SparcInsOrcc = SparcInsNop
  pred SparcInsOrncc = SparcInsOrcc
  pred SparcInsOrn = SparcInsOrncc
  pred SparcInsOr = SparcInsOrn
  pred SparcInsPdist = SparcInsOr
  pred SparcInsPdistn = SparcInsPdist
  pred SparcInsPopc = SparcInsPdistn
  pred SparcInsRd = SparcInsPopc
  pred SparcInsRestore = SparcInsRd
  pred SparcInsRett = SparcInsRestore
  pred SparcInsSave = SparcInsRett
  pred SparcInsSdivcc = SparcInsSave
  pred SparcInsSdivx = SparcInsSdivcc
  pred SparcInsSdiv = SparcInsSdivx
  pred SparcInsSethi = SparcInsSdiv
  pred SparcInsShutdown = SparcInsSethi
  pred SparcInsSiam = SparcInsShutdown
  pred SparcInsSllx = SparcInsSiam
  pred SparcInsSll = SparcInsSllx
  pred SparcInsSmulcc = SparcInsSll
  pred SparcInsSmul = SparcInsSmulcc
  pred SparcInsSrax = SparcInsSmul
  pred SparcInsSra = SparcInsSrax
  pred SparcInsSrlx = SparcInsSra
  pred SparcInsSrl = SparcInsSrlx
  pred SparcInsStbar = SparcInsSrl
  pred SparcInsStb = SparcInsStbar
  pred SparcInsStd = SparcInsStb
  pred SparcInsSt = SparcInsStd
  pred SparcInsSth = SparcInsSt
  pred SparcInsStq = SparcInsSth
  pred SparcInsStx = SparcInsStq
  pred SparcInsSubcc = SparcInsStx
  pred SparcInsSubx = SparcInsSubcc
  pred SparcInsSubxcc = SparcInsSubx
  pred SparcInsSub = SparcInsSubxcc
  pred SparcInsSwap = SparcInsSub
  pred SparcInsTaddcctv = SparcInsSwap
  pred SparcInsTaddcc = SparcInsTaddcctv
  pred SparcInsT = SparcInsTaddcc
  pred SparcInsTsubcctv = SparcInsT
  pred SparcInsTsubcc = SparcInsTsubcctv
  pred SparcInsUdivcc = SparcInsTsubcc
  pred SparcInsUdivx = SparcInsUdivcc
  pred SparcInsUdiv = SparcInsUdivx
  pred SparcInsUmulcc = SparcInsUdiv
  pred SparcInsUmulxhi = SparcInsUmulcc
  pred SparcInsUmul = SparcInsUmulxhi
  pred SparcInsUnimp = SparcInsUmul
  pred SparcInsFcmped = SparcInsUnimp
  pred SparcInsFcmpeq = SparcInsFcmped
  pred SparcInsFcmpes = SparcInsFcmpeq
  pred SparcInsWr = SparcInsFcmpes
  pred SparcInsXmulx = SparcInsWr
  pred SparcInsXmulxhi = SparcInsXmulx
  pred SparcInsXnorcc = SparcInsXmulxhi
  pred SparcInsXnor = SparcInsXnorcc
  pred SparcInsXorcc = SparcInsXnor
  pred SparcInsXor = SparcInsXorcc
  pred SparcInsRet = SparcInsXor
  pred SparcInsRetl = SparcInsRet
  pred SparcInsEnding = SparcInsRetl
  pred SparcInsInvalid = error "SparcInsn.pred: SparcInsInvalid 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 SparcInsEnding

  fromEnum SparcInsInvalid = 0
  fromEnum SparcInsAddcc = 1
  fromEnum SparcInsAddx = 2
  fromEnum SparcInsAddxcc = 3
  fromEnum SparcInsAddxc = 4
  fromEnum SparcInsAddxccc = 5
  fromEnum SparcInsAdd = 6
  fromEnum SparcInsAlignaddr = 7
  fromEnum SparcInsAlignaddrl = 8
  fromEnum SparcInsAndcc = 9
  fromEnum SparcInsAndncc = 10
  fromEnum SparcInsAndn = 11
  fromEnum SparcInsAnd = 12
  fromEnum SparcInsArray16 = 13
  fromEnum SparcInsArray32 = 14
  fromEnum SparcInsArray8 = 15
  fromEnum SparcInsB = 16
  fromEnum SparcInsJmp = 17
  fromEnum SparcInsBmask = 18
  fromEnum SparcInsFb = 19
  fromEnum SparcInsBrgez = 20
  fromEnum SparcInsBrgz = 21
  fromEnum SparcInsBrlez = 22
  fromEnum SparcInsBrlz = 23
  fromEnum SparcInsBrnz = 24
  fromEnum SparcInsBrz = 25
  fromEnum SparcInsBshuffle = 26
  fromEnum SparcInsCall = 27
  fromEnum SparcInsCasx = 28
  fromEnum SparcInsCas = 29
  fromEnum SparcInsCmask16 = 30
  fromEnum SparcInsCmask32 = 31
  fromEnum SparcInsCmask8 = 32
  fromEnum SparcInsCmp = 33
  fromEnum SparcInsEdge16 = 34
  fromEnum SparcInsEdge16l = 35
  fromEnum SparcInsEdge16ln = 36
  fromEnum SparcInsEdge16n = 37
  fromEnum SparcInsEdge32 = 38
  fromEnum SparcInsEdge32l = 39
  fromEnum SparcInsEdge32ln = 40
  fromEnum SparcInsEdge32n = 41
  fromEnum SparcInsEdge8 = 42
  fromEnum SparcInsEdge8l = 43
  fromEnum SparcInsEdge8ln = 44
  fromEnum SparcInsEdge8n = 45
  fromEnum SparcInsFabsd = 46
  fromEnum SparcInsFabsq = 47
  fromEnum SparcInsFabss = 48
  fromEnum SparcInsFaddd = 49
  fromEnum SparcInsFaddq = 50
  fromEnum SparcInsFadds = 51
  fromEnum SparcInsFaligndata = 52
  fromEnum SparcInsFand = 53
  fromEnum SparcInsFandnot1 = 54
  fromEnum SparcInsFandnot1s = 55
  fromEnum SparcInsFandnot2 = 56
  fromEnum SparcInsFandnot2s = 57
  fromEnum SparcInsFands = 58
  fromEnum SparcInsFchksm16 = 59
  fromEnum SparcInsFcmpd = 60
  fromEnum SparcInsFcmpeq16 = 61
  fromEnum SparcInsFcmpeq32 = 62
  fromEnum SparcInsFcmpgt16 = 63
  fromEnum SparcInsFcmpgt32 = 64
  fromEnum SparcInsFcmple16 = 65
  fromEnum SparcInsFcmple32 = 66
  fromEnum SparcInsFcmpne16 = 67
  fromEnum SparcInsFcmpne32 = 68
  fromEnum SparcInsFcmpq = 69
  fromEnum SparcInsFcmps = 70
  fromEnum SparcInsFdivd = 71
  fromEnum SparcInsFdivq = 72
  fromEnum SparcInsFdivs = 73
  fromEnum SparcInsFdmulq = 74
  fromEnum SparcInsFdtoi = 75
  fromEnum SparcInsFdtoq = 76
  fromEnum SparcInsFdtos = 77
  fromEnum SparcInsFdtox = 78
  fromEnum SparcInsFexpand = 79
  fromEnum SparcInsFhaddd = 80
  fromEnum SparcInsFhadds = 81
  fromEnum SparcInsFhsubd = 82
  fromEnum SparcInsFhsubs = 83
  fromEnum SparcInsFitod = 84
  fromEnum SparcInsFitoq = 85
  fromEnum SparcInsFitos = 86
  fromEnum SparcInsFlcmpd = 87
  fromEnum SparcInsFlcmps = 88
  fromEnum SparcInsFlushw = 89
  fromEnum SparcInsFmean16 = 90
  fromEnum SparcInsFmovd = 91
  fromEnum SparcInsFmovq = 92
  fromEnum SparcInsFmovrdgez = 93
  fromEnum SparcInsFmovrqgez = 94
  fromEnum SparcInsFmovrsgez = 95
  fromEnum SparcInsFmovrdgz = 96
  fromEnum SparcInsFmovrqgz = 97
  fromEnum SparcInsFmovrsgz = 98
  fromEnum SparcInsFmovrdlez = 99
  fromEnum SparcInsFmovrqlez = 100
  fromEnum SparcInsFmovrslez = 101
  fromEnum SparcInsFmovrdlz = 102
  fromEnum SparcInsFmovrqlz = 103
  fromEnum SparcInsFmovrslz = 104
  fromEnum SparcInsFmovrdnz = 105
  fromEnum SparcInsFmovrqnz = 106
  fromEnum SparcInsFmovrsnz = 107
  fromEnum SparcInsFmovrdz = 108
  fromEnum SparcInsFmovrqz = 109
  fromEnum SparcInsFmovrsz = 110
  fromEnum SparcInsFmovs = 111
  fromEnum SparcInsFmul8sux16 = 112
  fromEnum SparcInsFmul8ulx16 = 113
  fromEnum SparcInsFmul8x16 = 114
  fromEnum SparcInsFmul8x16al = 115
  fromEnum SparcInsFmul8x16au = 116
  fromEnum SparcInsFmuld = 117
  fromEnum SparcInsFmuld8sux16 = 118
  fromEnum SparcInsFmuld8ulx16 = 119
  fromEnum SparcInsFmulq = 120
  fromEnum SparcInsFmuls = 121
  fromEnum SparcInsFnaddd = 122
  fromEnum SparcInsFnadds = 123
  fromEnum SparcInsFnand = 124
  fromEnum SparcInsFnands = 125
  fromEnum SparcInsFnegd = 126
  fromEnum SparcInsFnegq = 127
  fromEnum SparcInsFnegs = 128
  fromEnum SparcInsFnhaddd = 129
  fromEnum SparcInsFnhadds = 130
  fromEnum SparcInsFnor = 131
  fromEnum SparcInsFnors = 132
  fromEnum SparcInsFnot1 = 133
  fromEnum SparcInsFnot1s = 134
  fromEnum SparcInsFnot2 = 135
  fromEnum SparcInsFnot2s = 136
  fromEnum SparcInsFone = 137
  fromEnum SparcInsFones = 138
  fromEnum SparcInsFor = 139
  fromEnum SparcInsFornot1 = 140
  fromEnum SparcInsFornot1s = 141
  fromEnum SparcInsFornot2 = 142
  fromEnum SparcInsFornot2s = 143
  fromEnum SparcInsFors = 144
  fromEnum SparcInsFpack16 = 145
  fromEnum SparcInsFpack32 = 146
  fromEnum SparcInsFpackfix = 147
  fromEnum SparcInsFpadd16 = 148
  fromEnum SparcInsFpadd16s = 149
  fromEnum SparcInsFpadd32 = 150
  fromEnum SparcInsFpadd32s = 151
  fromEnum SparcInsFpadd64 = 152
  fromEnum SparcInsFpmerge = 153
  fromEnum SparcInsFpsub16 = 154
  fromEnum SparcInsFpsub16s = 155
  fromEnum SparcInsFpsub32 = 156
  fromEnum SparcInsFpsub32s = 157
  fromEnum SparcInsFqtod = 158
  fromEnum SparcInsFqtoi = 159
  fromEnum SparcInsFqtos = 160
  fromEnum SparcInsFqtox = 161
  fromEnum SparcInsFslas16 = 162
  fromEnum SparcInsFslas32 = 163
  fromEnum SparcInsFsll16 = 164
  fromEnum SparcInsFsll32 = 165
  fromEnum SparcInsFsmuld = 166
  fromEnum SparcInsFsqrtd = 167
  fromEnum SparcInsFsqrtq = 168
  fromEnum SparcInsFsqrts = 169
  fromEnum SparcInsFsra16 = 170
  fromEnum SparcInsFsra32 = 171
  fromEnum SparcInsFsrc1 = 172
  fromEnum SparcInsFsrc1s = 173
  fromEnum SparcInsFsrc2 = 174
  fromEnum SparcInsFsrc2s = 175
  fromEnum SparcInsFsrl16 = 176
  fromEnum SparcInsFsrl32 = 177
  fromEnum SparcInsFstod = 178
  fromEnum SparcInsFstoi = 179
  fromEnum SparcInsFstoq = 180
  fromEnum SparcInsFstox = 181
  fromEnum SparcInsFsubd = 182
  fromEnum SparcInsFsubq = 183
  fromEnum SparcInsFsubs = 184
  fromEnum SparcInsFxnor = 185
  fromEnum SparcInsFxnors = 186
  fromEnum SparcInsFxor = 187
  fromEnum SparcInsFxors = 188
  fromEnum SparcInsFxtod = 189
  fromEnum SparcInsFxtoq = 190
  fromEnum SparcInsFxtos = 191
  fromEnum SparcInsFzero = 192
  fromEnum SparcInsFzeros = 193
  fromEnum SparcInsJmpl = 194
  fromEnum SparcInsLdd = 195
  fromEnum SparcInsLd = 196
  fromEnum SparcInsLdq = 197
  fromEnum SparcInsLdsb = 198
  fromEnum SparcInsLdsh = 199
  fromEnum SparcInsLdsw = 200
  fromEnum SparcInsLdub = 201
  fromEnum SparcInsLduh = 202
  fromEnum SparcInsLdx = 203
  fromEnum SparcInsLzcnt = 204
  fromEnum SparcInsMembar = 205
  fromEnum SparcInsMovdtox = 206
  fromEnum SparcInsMov = 207
  fromEnum SparcInsMovrgez = 208
  fromEnum SparcInsMovrgz = 209
  fromEnum SparcInsMovrlez = 210
  fromEnum SparcInsMovrlz = 211
  fromEnum SparcInsMovrnz = 212
  fromEnum SparcInsMovrz = 213
  fromEnum SparcInsMovstosw = 214
  fromEnum SparcInsMovstouw = 215
  fromEnum SparcInsMulx = 216
  fromEnum SparcInsNop = 217
  fromEnum SparcInsOrcc = 218
  fromEnum SparcInsOrncc = 219
  fromEnum SparcInsOrn = 220
  fromEnum SparcInsOr = 221
  fromEnum SparcInsPdist = 222
  fromEnum SparcInsPdistn = 223
  fromEnum SparcInsPopc = 224
  fromEnum SparcInsRd = 225
  fromEnum SparcInsRestore = 226
  fromEnum SparcInsRett = 227
  fromEnum SparcInsSave = 228
  fromEnum SparcInsSdivcc = 229
  fromEnum SparcInsSdivx = 230
  fromEnum SparcInsSdiv = 231
  fromEnum SparcInsSethi = 232
  fromEnum SparcInsShutdown = 233
  fromEnum SparcInsSiam = 234
  fromEnum SparcInsSllx = 235
  fromEnum SparcInsSll = 236
  fromEnum SparcInsSmulcc = 237
  fromEnum SparcInsSmul = 238
  fromEnum SparcInsSrax = 239
  fromEnum SparcInsSra = 240
  fromEnum SparcInsSrlx = 241
  fromEnum SparcInsSrl = 242
  fromEnum SparcInsStbar = 243
  fromEnum SparcInsStb = 244
  fromEnum SparcInsStd = 245
  fromEnum SparcInsSt = 246
  fromEnum SparcInsSth = 247
  fromEnum SparcInsStq = 248
  fromEnum SparcInsStx = 249
  fromEnum SparcInsSubcc = 250
  fromEnum SparcInsSubx = 251
  fromEnum SparcInsSubxcc = 252
  fromEnum SparcInsSub = 253
  fromEnum SparcInsSwap = 254
  fromEnum SparcInsTaddcctv = 255
  fromEnum SparcInsTaddcc = 256
  fromEnum SparcInsT = 257
  fromEnum SparcInsTsubcctv = 258
  fromEnum SparcInsTsubcc = 259
  fromEnum SparcInsUdivcc = 260
  fromEnum SparcInsUdivx = 261
  fromEnum SparcInsUdiv = 262
  fromEnum SparcInsUmulcc = 263
  fromEnum SparcInsUmulxhi = 264
  fromEnum SparcInsUmul = 265
  fromEnum SparcInsUnimp = 266
  fromEnum SparcInsFcmped = 267
  fromEnum SparcInsFcmpeq = 268
  fromEnum SparcInsFcmpes = 269
  fromEnum SparcInsWr = 270
  fromEnum SparcInsXmulx = 271
  fromEnum SparcInsXmulxhi = 272
  fromEnum SparcInsXnorcc = 273
  fromEnum SparcInsXnor = 274
  fromEnum SparcInsXorcc = 275
  fromEnum SparcInsXor = 276
  fromEnum SparcInsRet = 277
  fromEnum SparcInsRetl = 278
  fromEnum SparcInsEnding = 279

  toEnum 0 = SparcInsInvalid
  toEnum 1 = SparcInsAddcc
  toEnum 2 = SparcInsAddx
  toEnum 3 = SparcInsAddxcc
  toEnum 4 = SparcInsAddxc
  toEnum 5 = SparcInsAddxccc
  toEnum 6 = SparcInsAdd
  toEnum 7 = SparcInsAlignaddr
  toEnum 8 = SparcInsAlignaddrl
  toEnum 9 = SparcInsAndcc
  toEnum 10 = SparcInsAndncc
  toEnum 11 = SparcInsAndn
  toEnum 12 = SparcInsAnd
  toEnum 13 = SparcInsArray16
  toEnum 14 = SparcInsArray32
  toEnum 15 = SparcInsArray8
  toEnum 16 = SparcInsB
  toEnum 17 = SparcInsJmp
  toEnum 18 = SparcInsBmask
  toEnum 19 = SparcInsFb
  toEnum 20 = SparcInsBrgez
  toEnum 21 = SparcInsBrgz
  toEnum 22 = SparcInsBrlez
  toEnum 23 = SparcInsBrlz
  toEnum 24 = SparcInsBrnz
  toEnum 25 = SparcInsBrz
  toEnum 26 = SparcInsBshuffle
  toEnum 27 = SparcInsCall
  toEnum 28 = SparcInsCasx
  toEnum 29 = SparcInsCas
  toEnum 30 = SparcInsCmask16
  toEnum 31 = SparcInsCmask32
  toEnum 32 = SparcInsCmask8
  toEnum 33 = SparcInsCmp
  toEnum 34 = SparcInsEdge16
  toEnum 35 = SparcInsEdge16l
  toEnum 36 = SparcInsEdge16ln
  toEnum 37 = SparcInsEdge16n
  toEnum 38 = SparcInsEdge32
  toEnum 39 = SparcInsEdge32l
  toEnum 40 = SparcInsEdge32ln
  toEnum 41 = SparcInsEdge32n
  toEnum 42 = SparcInsEdge8
  toEnum 43 = SparcInsEdge8l
  toEnum 44 = SparcInsEdge8ln
  toEnum 45 = SparcInsEdge8n
  toEnum 46 = SparcInsFabsd
  toEnum 47 = SparcInsFabsq
  toEnum 48 = SparcInsFabss
  toEnum 49 = SparcInsFaddd
  toEnum 50 = SparcInsFaddq
  toEnum 51 = SparcInsFadds
  toEnum 52 = SparcInsFaligndata
  toEnum 53 = SparcInsFand
  toEnum 54 = SparcInsFandnot1
  toEnum 55 = SparcInsFandnot1s
  toEnum 56 = SparcInsFandnot2
  toEnum 57 = SparcInsFandnot2s
  toEnum 58 = SparcInsFands
  toEnum 59 = SparcInsFchksm16
  toEnum 60 = SparcInsFcmpd
  toEnum 61 = SparcInsFcmpeq16
  toEnum 62 = SparcInsFcmpeq32
  toEnum 63 = SparcInsFcmpgt16
  toEnum 64 = SparcInsFcmpgt32
  toEnum 65 = SparcInsFcmple16
  toEnum 66 = SparcInsFcmple32
  toEnum 67 = SparcInsFcmpne16
  toEnum 68 = SparcInsFcmpne32
  toEnum 69 = SparcInsFcmpq
  toEnum 70 = SparcInsFcmps
  toEnum 71 = SparcInsFdivd
  toEnum 72 = SparcInsFdivq
  toEnum 73 = SparcInsFdivs
  toEnum 74 = SparcInsFdmulq
  toEnum 75 = SparcInsFdtoi
  toEnum 76 = SparcInsFdtoq
  toEnum 77 = SparcInsFdtos
  toEnum 78 = SparcInsFdtox
  toEnum 79 = SparcInsFexpand
  toEnum 80 = SparcInsFhaddd
  toEnum 81 = SparcInsFhadds
  toEnum 82 = SparcInsFhsubd
  toEnum 83 = SparcInsFhsubs
  toEnum 84 = SparcInsFitod
  toEnum 85 = SparcInsFitoq
  toEnum 86 = SparcInsFitos
  toEnum 87 = SparcInsFlcmpd
  toEnum 88 = SparcInsFlcmps
  toEnum 89 = SparcInsFlushw
  toEnum 90 = SparcInsFmean16
  toEnum 91 = SparcInsFmovd
  toEnum 92 = SparcInsFmovq
  toEnum 93 = SparcInsFmovrdgez
  toEnum 94 = SparcInsFmovrqgez
  toEnum 95 = SparcInsFmovrsgez
  toEnum 96 = SparcInsFmovrdgz
  toEnum 97 = SparcInsFmovrqgz
  toEnum 98 = SparcInsFmovrsgz
  toEnum 99 = SparcInsFmovrdlez
  toEnum 100 = SparcInsFmovrqlez
  toEnum 101 = SparcInsFmovrslez
  toEnum 102 = SparcInsFmovrdlz
  toEnum 103 = SparcInsFmovrqlz
  toEnum 104 = SparcInsFmovrslz
  toEnum 105 = SparcInsFmovrdnz
  toEnum 106 = SparcInsFmovrqnz
  toEnum 107 = SparcInsFmovrsnz
  toEnum 108 = SparcInsFmovrdz
  toEnum 109 = SparcInsFmovrqz
  toEnum 110 = SparcInsFmovrsz
  toEnum 111 = SparcInsFmovs
  toEnum 112 = SparcInsFmul8sux16
  toEnum 113 = SparcInsFmul8ulx16
  toEnum 114 = SparcInsFmul8x16
  toEnum 115 = SparcInsFmul8x16al
  toEnum 116 = SparcInsFmul8x16au
  toEnum 117 = SparcInsFmuld
  toEnum 118 = SparcInsFmuld8sux16
  toEnum 119 = SparcInsFmuld8ulx16
  toEnum 120 = SparcInsFmulq
  toEnum 121 = SparcInsFmuls
  toEnum 122 = SparcInsFnaddd
  toEnum 123 = SparcInsFnadds
  toEnum 124 = SparcInsFnand
  toEnum 125 = SparcInsFnands
  toEnum 126 = SparcInsFnegd
  toEnum 127 = SparcInsFnegq
  toEnum 128 = SparcInsFnegs
  toEnum 129 = SparcInsFnhaddd
  toEnum 130 = SparcInsFnhadds
  toEnum 131 = SparcInsFnor
  toEnum 132 = SparcInsFnors
  toEnum 133 = SparcInsFnot1
  toEnum 134 = SparcInsFnot1s
  toEnum 135 = SparcInsFnot2
  toEnum 136 = SparcInsFnot2s
  toEnum 137 = SparcInsFone
  toEnum 138 = SparcInsFones
  toEnum 139 = SparcInsFor
  toEnum 140 = SparcInsFornot1
  toEnum 141 = SparcInsFornot1s
  toEnum 142 = SparcInsFornot2
  toEnum 143 = SparcInsFornot2s
  toEnum 144 = SparcInsFors
  toEnum 145 = SparcInsFpack16
  toEnum 146 = SparcInsFpack32
  toEnum 147 = SparcInsFpackfix
  toEnum 148 = SparcInsFpadd16
  toEnum 149 = SparcInsFpadd16s
  toEnum 150 = SparcInsFpadd32
  toEnum 151 = SparcInsFpadd32s
  toEnum 152 = SparcInsFpadd64
  toEnum 153 = SparcInsFpmerge
  toEnum 154 = SparcInsFpsub16
  toEnum 155 = SparcInsFpsub16s
  toEnum 156 = SparcInsFpsub32
  toEnum 157 = SparcInsFpsub32s
  toEnum 158 = SparcInsFqtod
  toEnum 159 = SparcInsFqtoi
  toEnum 160 = SparcInsFqtos
  toEnum 161 = SparcInsFqtox
  toEnum 162 = SparcInsFslas16
  toEnum 163 = SparcInsFslas32
  toEnum 164 = SparcInsFsll16
  toEnum 165 = SparcInsFsll32
  toEnum 166 = SparcInsFsmuld
  toEnum 167 = SparcInsFsqrtd
  toEnum 168 = SparcInsFsqrtq
  toEnum 169 = SparcInsFsqrts
  toEnum 170 = SparcInsFsra16
  toEnum 171 = SparcInsFsra32
  toEnum 172 = SparcInsFsrc1
  toEnum 173 = SparcInsFsrc1s
  toEnum 174 = SparcInsFsrc2
  toEnum 175 = SparcInsFsrc2s
  toEnum 176 = SparcInsFsrl16
  toEnum 177 = SparcInsFsrl32
  toEnum 178 = SparcInsFstod
  toEnum 179 = SparcInsFstoi
  toEnum 180 = SparcInsFstoq
  toEnum 181 = SparcInsFstox
  toEnum 182 = SparcInsFsubd
  toEnum 183 = SparcInsFsubq
  toEnum 184 = SparcInsFsubs
  toEnum 185 = SparcInsFxnor
  toEnum 186 = SparcInsFxnors
  toEnum 187 = SparcInsFxor
  toEnum 188 = SparcInsFxors
  toEnum 189 = SparcInsFxtod
  toEnum 190 = SparcInsFxtoq
  toEnum 191 = SparcInsFxtos
  toEnum 192 = SparcInsFzero
  toEnum 193 = SparcInsFzeros
  toEnum 194 = SparcInsJmpl
  toEnum 195 = SparcInsLdd
  toEnum 196 = SparcInsLd
  toEnum 197 = SparcInsLdq
  toEnum 198 = SparcInsLdsb
  toEnum 199 = SparcInsLdsh
  toEnum 200 = SparcInsLdsw
  toEnum 201 = SparcInsLdub
  toEnum 202 = SparcInsLduh
  toEnum 203 = SparcInsLdx
  toEnum 204 = SparcInsLzcnt
  toEnum 205 = SparcInsMembar
  toEnum 206 = SparcInsMovdtox
  toEnum 207 = SparcInsMov
  toEnum 208 = SparcInsMovrgez
  toEnum 209 = SparcInsMovrgz
  toEnum 210 = SparcInsMovrlez
  toEnum 211 = SparcInsMovrlz
  toEnum 212 = SparcInsMovrnz
  toEnum 213 = SparcInsMovrz
  toEnum 214 = SparcInsMovstosw
  toEnum 215 = SparcInsMovstouw
  toEnum 216 = SparcInsMulx
  toEnum 217 = SparcInsNop
  toEnum 218 = SparcInsOrcc
  toEnum 219 = SparcInsOrncc
  toEnum 220 = SparcInsOrn
  toEnum 221 = SparcInsOr
  toEnum 222 = SparcInsPdist
  toEnum 223 = SparcInsPdistn
  toEnum 224 = SparcInsPopc
  toEnum 225 = SparcInsRd
  toEnum 226 = SparcInsRestore
  toEnum 227 = SparcInsRett
  toEnum 228 = SparcInsSave
  toEnum 229 = SparcInsSdivcc
  toEnum 230 = SparcInsSdivx
  toEnum 231 = SparcInsSdiv
  toEnum 232 = SparcInsSethi
  toEnum 233 = SparcInsShutdown
  toEnum 234 = SparcInsSiam
  toEnum 235 = SparcInsSllx
  toEnum 236 = SparcInsSll
  toEnum 237 = SparcInsSmulcc
  toEnum 238 = SparcInsSmul
  toEnum 239 = SparcInsSrax
  toEnum 240 = SparcInsSra
  toEnum 241 = SparcInsSrlx
  toEnum 242 = SparcInsSrl
  toEnum 243 = SparcInsStbar
  toEnum 244 = SparcInsStb
  toEnum 245 = SparcInsStd
  toEnum 246 = SparcInsSt
  toEnum 247 = SparcInsSth
  toEnum 248 = SparcInsStq
  toEnum 249 = SparcInsStx
  toEnum 250 = SparcInsSubcc
  toEnum 251 = SparcInsSubx
  toEnum 252 = SparcInsSubxcc
  toEnum 253 = SparcInsSub
  toEnum 254 = SparcInsSwap
  toEnum 255 = SparcInsTaddcctv
  toEnum 256 = SparcInsTaddcc
  toEnum 257 = SparcInsT
  toEnum 258 = SparcInsTsubcctv
  toEnum 259 = SparcInsTsubcc
  toEnum 260 = SparcInsUdivcc
  toEnum 261 = SparcInsUdivx
  toEnum 262 = SparcInsUdiv
  toEnum 263 = SparcInsUmulcc
  toEnum 264 = SparcInsUmulxhi
  toEnum 265 = SparcInsUmul
  toEnum 266 = SparcInsUnimp
  toEnum 267 = SparcInsFcmped
  toEnum 268 = SparcInsFcmpeq
  toEnum 269 = SparcInsFcmpes
  toEnum 270 = SparcInsWr
  toEnum 271 = SparcInsXmulx
  toEnum 272 = SparcInsXmulxhi
  toEnum 273 = SparcInsXnorcc
  toEnum 274 = SparcInsXnor
  toEnum 275 = SparcInsXorcc
  toEnum 276 = SparcInsXor
  toEnum 277 = SparcInsRet
  toEnum 278 = SparcInsRetl
  toEnum 279 = SparcInsEnding
  toEnum unmatched = error ("SparcInsn.toEnum: Cannot match " ++ show unmatched)

{-# LINE 128 "src/Hapstone/Internal/Sparc.chs" #-}

-- | SPARC instruction groups
data SparcInsnGroup = SparcGrpInvalid
                    | SparcGrpJump
                    | SparcGrpHardquad
                    | SparcGrpV9
                    | SparcGrpVis
                    | SparcGrpVis2
                    | SparcGrpVis3
                    | SparcGrp32bit
                    | SparcGrp64bit
                    | SparcGrpEnding
  deriving (Show,Eq,Bounded)
instance Enum SparcInsnGroup where
  succ SparcGrpInvalid = SparcGrpJump
  succ SparcGrpJump = SparcGrpHardquad
  succ SparcGrpHardquad = SparcGrpV9
  succ SparcGrpV9 = SparcGrpVis
  succ SparcGrpVis = SparcGrpVis2
  succ SparcGrpVis2 = SparcGrpVis3
  succ SparcGrpVis3 = SparcGrp32bit
  succ SparcGrp32bit = SparcGrp64bit
  succ SparcGrp64bit = SparcGrpEnding
  succ SparcGrpEnding = error "SparcInsnGroup.succ: SparcGrpEnding has no successor"

  pred SparcGrpJump = SparcGrpInvalid
  pred SparcGrpHardquad = SparcGrpJump
  pred SparcGrpV9 = SparcGrpHardquad
  pred SparcGrpVis = SparcGrpV9
  pred SparcGrpVis2 = SparcGrpVis
  pred SparcGrpVis3 = SparcGrpVis2
  pred SparcGrp32bit = SparcGrpVis3
  pred SparcGrp64bit = SparcGrp32bit
  pred SparcGrpEnding = SparcGrp64bit
  pred SparcGrpInvalid = error "SparcInsnGroup.pred: SparcGrpInvalid 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 SparcGrpEnding

  fromEnum SparcGrpInvalid = 0
  fromEnum SparcGrpJump = 1
  fromEnum SparcGrpHardquad = 128
  fromEnum SparcGrpV9 = 129
  fromEnum SparcGrpVis = 130
  fromEnum SparcGrpVis2 = 131
  fromEnum SparcGrpVis3 = 132
  fromEnum SparcGrp32bit = 133
  fromEnum SparcGrp64bit = 134
  fromEnum SparcGrpEnding = 135

  toEnum 0 = SparcGrpInvalid
  toEnum 1 = SparcGrpJump
  toEnum 128 = SparcGrpHardquad
  toEnum 129 = SparcGrpV9
  toEnum 130 = SparcGrpVis
  toEnum 131 = SparcGrpVis2
  toEnum 132 = SparcGrpVis3
  toEnum 133 = SparcGrp32bit
  toEnum 134 = SparcGrp64bit
  toEnum 135 = SparcGrpEnding
  toEnum unmatched = error ("SparcInsnGroup.toEnum: Cannot match " ++ show unmatched)

{-# LINE 131 "src/Hapstone/Internal/Sparc.chs" #-}