{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Asm.Aarch64 ( AArch64 (..)
, Addr (..)
, Cond (..)
, Shift (..), BM (..)
, AbsReg (..)
, FAbsReg (..)
, AReg (..)
, FAReg (..)
, prettyDebug
, mapR
, mapFR
, toInt
, fToInt
, pus, pos
, puds, pods
, pSym
) where
import Asm.M
import Control.DeepSeq (NFData (..))
import Data.Copointed
import Data.Word (Word16, Word8)
import GHC.Generics (Generic)
import Numeric (showHex)
import Prettyprinter (Doc, Pretty (..), brackets, (<+>))
import Prettyprinter.Ext
import System.Info (os)
data AReg = X0 | X1 | X2 | X3 | X4 | X5 | X6 | X7 | X8 | X9 | X10 | X11 | X12 | X13 | X14 | X15 | X16 | X17 | X18 | X19 | X20 | X21 | X22 | X23 | X24 | X25 | X26 | X27 | X28 | X29 | X30 | SP deriving (AReg -> AReg -> Bool
(AReg -> AReg -> Bool) -> (AReg -> AReg -> Bool) -> Eq AReg
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AReg -> AReg -> Bool
== :: AReg -> AReg -> Bool
$c/= :: AReg -> AReg -> Bool
/= :: AReg -> AReg -> Bool
Eq, Eq AReg
Eq AReg =>
(AReg -> AReg -> Ordering)
-> (AReg -> AReg -> Bool)
-> (AReg -> AReg -> Bool)
-> (AReg -> AReg -> Bool)
-> (AReg -> AReg -> Bool)
-> (AReg -> AReg -> AReg)
-> (AReg -> AReg -> AReg)
-> Ord AReg
AReg -> AReg -> Bool
AReg -> AReg -> Ordering
AReg -> AReg -> AReg
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: AReg -> AReg -> Ordering
compare :: AReg -> AReg -> Ordering
$c< :: AReg -> AReg -> Bool
< :: AReg -> AReg -> Bool
$c<= :: AReg -> AReg -> Bool
<= :: AReg -> AReg -> Bool
$c> :: AReg -> AReg -> Bool
> :: AReg -> AReg -> Bool
$c>= :: AReg -> AReg -> Bool
>= :: AReg -> AReg -> Bool
$cmax :: AReg -> AReg -> AReg
max :: AReg -> AReg -> AReg
$cmin :: AReg -> AReg -> AReg
min :: AReg -> AReg -> AReg
Ord, Int -> AReg
AReg -> Int
AReg -> [AReg]
AReg -> AReg
AReg -> AReg -> [AReg]
AReg -> AReg -> AReg -> [AReg]
(AReg -> AReg)
-> (AReg -> AReg)
-> (Int -> AReg)
-> (AReg -> Int)
-> (AReg -> [AReg])
-> (AReg -> AReg -> [AReg])
-> (AReg -> AReg -> [AReg])
-> (AReg -> AReg -> AReg -> [AReg])
-> Enum AReg
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: AReg -> AReg
succ :: AReg -> AReg
$cpred :: AReg -> AReg
pred :: AReg -> AReg
$ctoEnum :: Int -> AReg
toEnum :: Int -> AReg
$cfromEnum :: AReg -> Int
fromEnum :: AReg -> Int
$cenumFrom :: AReg -> [AReg]
enumFrom :: AReg -> [AReg]
$cenumFromThen :: AReg -> AReg -> [AReg]
enumFromThen :: AReg -> AReg -> [AReg]
$cenumFromTo :: AReg -> AReg -> [AReg]
enumFromTo :: AReg -> AReg -> [AReg]
$cenumFromThenTo :: AReg -> AReg -> AReg -> [AReg]
enumFromThenTo :: AReg -> AReg -> AReg -> [AReg]
Enum, (forall x. AReg -> Rep AReg x)
-> (forall x. Rep AReg x -> AReg) -> Generic AReg
forall x. Rep AReg x -> AReg
forall x. AReg -> Rep AReg x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. AReg -> Rep AReg x
from :: forall x. AReg -> Rep AReg x
$cto :: forall x. Rep AReg x -> AReg
to :: forall x. Rep AReg x -> AReg
Generic)
instance Pretty AReg where
pretty :: forall ann. AReg -> Doc ann
pretty AReg
X0 = Doc ann
"x0"; pretty AReg
X1 = Doc ann
"x1"; pretty AReg
X2 = Doc ann
"x2"; pretty AReg
X3 = Doc ann
"x3"; pretty AReg
X4 = Doc ann
"x4"; pretty AReg
X5 = Doc ann
"x5"; pretty AReg
X6 = Doc ann
"x6"; pretty AReg
X7 = Doc ann
"x7"
pretty AReg
X8 = Doc ann
"x8"; pretty AReg
X9 = Doc ann
"x9"; pretty AReg
X10 = Doc ann
"x10"; pretty AReg
X11 = Doc ann
"x11"; pretty AReg
X12 = Doc ann
"x12"; pretty AReg
X13 = Doc ann
"x13"; pretty AReg
X14 = Doc ann
"x14"; pretty AReg
X15 = Doc ann
"x15"
pretty AReg
X16 = Doc ann
"x16"; pretty AReg
X17 = Doc ann
"x17"; pretty AReg
X18 = Doc ann
"x18"; pretty AReg
X19 = Doc ann
"x19"; pretty AReg
X20 = Doc ann
"x20"; pretty AReg
X21 = Doc ann
"x21"; pretty AReg
X22 = Doc ann
"x22"; pretty AReg
X23 = Doc ann
"x23"
pretty AReg
X24 = Doc ann
"x24"; pretty AReg
X25 = Doc ann
"x25"; pretty AReg
X26 = Doc ann
"x26"; pretty AReg
X27 = Doc ann
"x27"; pretty AReg
X28 = Doc ann
"x28"; pretty AReg
X29 = Doc ann
"x29"; pretty AReg
X30 = Doc ann
"x30"; pretty AReg
SP = Doc ann
"sp"
instance Show AReg where show :: AReg -> [Char]
show = Doc Any -> [Char]
forall a. Show a => a -> [Char]
show(Doc Any -> [Char]) -> (AReg -> Doc Any) -> AReg -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.AReg -> Doc Any
forall a ann. Pretty a => a -> Doc ann
forall ann. AReg -> Doc ann
pretty
data FAReg = D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | D11 | D12 | D13 | D14 | D15 | D16 | D17 | D18 | D19 | D20 | D21 | D22 | D23 | D24 | D25 | D26 | D27 | D28 | D29 | D30 | D31 deriving (FAReg -> FAReg -> Bool
(FAReg -> FAReg -> Bool) -> (FAReg -> FAReg -> Bool) -> Eq FAReg
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FAReg -> FAReg -> Bool
== :: FAReg -> FAReg -> Bool
$c/= :: FAReg -> FAReg -> Bool
/= :: FAReg -> FAReg -> Bool
Eq, Eq FAReg
Eq FAReg =>
(FAReg -> FAReg -> Ordering)
-> (FAReg -> FAReg -> Bool)
-> (FAReg -> FAReg -> Bool)
-> (FAReg -> FAReg -> Bool)
-> (FAReg -> FAReg -> Bool)
-> (FAReg -> FAReg -> FAReg)
-> (FAReg -> FAReg -> FAReg)
-> Ord FAReg
FAReg -> FAReg -> Bool
FAReg -> FAReg -> Ordering
FAReg -> FAReg -> FAReg
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: FAReg -> FAReg -> Ordering
compare :: FAReg -> FAReg -> Ordering
$c< :: FAReg -> FAReg -> Bool
< :: FAReg -> FAReg -> Bool
$c<= :: FAReg -> FAReg -> Bool
<= :: FAReg -> FAReg -> Bool
$c> :: FAReg -> FAReg -> Bool
> :: FAReg -> FAReg -> Bool
$c>= :: FAReg -> FAReg -> Bool
>= :: FAReg -> FAReg -> Bool
$cmax :: FAReg -> FAReg -> FAReg
max :: FAReg -> FAReg -> FAReg
$cmin :: FAReg -> FAReg -> FAReg
min :: FAReg -> FAReg -> FAReg
Ord, Int -> FAReg
FAReg -> Int
FAReg -> [FAReg]
FAReg -> FAReg
FAReg -> FAReg -> [FAReg]
FAReg -> FAReg -> FAReg -> [FAReg]
(FAReg -> FAReg)
-> (FAReg -> FAReg)
-> (Int -> FAReg)
-> (FAReg -> Int)
-> (FAReg -> [FAReg])
-> (FAReg -> FAReg -> [FAReg])
-> (FAReg -> FAReg -> [FAReg])
-> (FAReg -> FAReg -> FAReg -> [FAReg])
-> Enum FAReg
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: FAReg -> FAReg
succ :: FAReg -> FAReg
$cpred :: FAReg -> FAReg
pred :: FAReg -> FAReg
$ctoEnum :: Int -> FAReg
toEnum :: Int -> FAReg
$cfromEnum :: FAReg -> Int
fromEnum :: FAReg -> Int
$cenumFrom :: FAReg -> [FAReg]
enumFrom :: FAReg -> [FAReg]
$cenumFromThen :: FAReg -> FAReg -> [FAReg]
enumFromThen :: FAReg -> FAReg -> [FAReg]
$cenumFromTo :: FAReg -> FAReg -> [FAReg]
enumFromTo :: FAReg -> FAReg -> [FAReg]
$cenumFromThenTo :: FAReg -> FAReg -> FAReg -> [FAReg]
enumFromThenTo :: FAReg -> FAReg -> FAReg -> [FAReg]
Enum, (forall x. FAReg -> Rep FAReg x)
-> (forall x. Rep FAReg x -> FAReg) -> Generic FAReg
forall x. Rep FAReg x -> FAReg
forall x. FAReg -> Rep FAReg x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. FAReg -> Rep FAReg x
from :: forall x. FAReg -> Rep FAReg x
$cto :: forall x. Rep FAReg x -> FAReg
to :: forall x. Rep FAReg x -> FAReg
Generic)
instance Pretty FAReg where
pretty :: forall ann. FAReg -> Doc ann
pretty FAReg
D0 = Doc ann
"d0"; pretty FAReg
D1 = Doc ann
"d1"; pretty FAReg
D2 = Doc ann
"d2"; pretty FAReg
D3 = Doc ann
"d3"; pretty FAReg
D4 = Doc ann
"d4"; pretty FAReg
D5 = Doc ann
"d5"; pretty FAReg
D6 = Doc ann
"d6"; pretty FAReg
D7 = Doc ann
"d7"
pretty FAReg
D8 = Doc ann
"d8"; pretty FAReg
D9 = Doc ann
"d9"; pretty FAReg
D10 = Doc ann
"d10"; pretty FAReg
D11 = Doc ann
"d11"; pretty FAReg
D12 = Doc ann
"d12"; pretty FAReg
D13 = Doc ann
"d13"; pretty FAReg
D14 = Doc ann
"d14"; pretty FAReg
D15 = Doc ann
"d15"
pretty FAReg
D16 = Doc ann
"d16"; pretty FAReg
D17 = Doc ann
"d17"; pretty FAReg
D18 = Doc ann
"d18"; pretty FAReg
D19 = Doc ann
"d19"; pretty FAReg
D20 = Doc ann
"d20"; pretty FAReg
D21 = Doc ann
"d21"; pretty FAReg
D22 = Doc ann
"d22"; pretty FAReg
D23 = Doc ann
"d23"
pretty FAReg
D24 = Doc ann
"d24"; pretty FAReg
D25 = Doc ann
"d25"; pretty FAReg
D26 = Doc ann
"d26"; pretty FAReg
D27 = Doc ann
"d27"; pretty FAReg
D28 = Doc ann
"d28"; pretty FAReg
D29 = Doc ann
"d29"; pretty FAReg
D30 = Doc ann
"d30"; pretty FAReg
D31 = Doc ann
"d31"
instance Show FAReg where show :: FAReg -> [Char]
show = Doc Any -> [Char]
forall a. Show a => a -> [Char]
show(Doc Any -> [Char]) -> (FAReg -> Doc Any) -> FAReg -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.FAReg -> Doc Any
forall a ann. Pretty a => a -> Doc ann
forall ann. FAReg -> Doc ann
pretty
instance NFData AReg where
instance NFData FAReg where
data AbsReg = IReg !Int | CArg0 | CArg1 | CArg2 | CArg3 | CArg4 | CArg5 | CArg6 | CArg7 | LR | FP | ASP
instance Pretty AbsReg where
pretty :: forall ann. AbsReg -> Doc ann
pretty (IReg Int
i) = Doc ann
"T" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int
i
pretty AbsReg
LR = Doc ann
"LR"
pretty AbsReg
ASP = Doc ann
"SP"
pretty AbsReg
CArg0 = Doc ann
"X0"
pretty AbsReg
CArg1 = Doc ann
"X1"
pretty AbsReg
CArg2 = Doc ann
"X2"
pretty AbsReg
CArg3 = Doc ann
"X3"
pretty AbsReg
CArg4 = Doc ann
"X4"
pretty AbsReg
CArg5 = Doc ann
"X5"
pretty AbsReg
CArg6 = Doc ann
"X6"
pretty AbsReg
CArg7 = Doc ann
"X7"
pretty AbsReg
FP = Doc ann
"FP"
data FAbsReg = FReg !Int | FArg0 | FArg1 | FArg2 | FArg3 | FArg4 | FArg5 | FArg6 | FArg7
instance Pretty FAbsReg where
pretty :: forall ann. FAbsReg -> Doc ann
pretty (FReg Int
i) = Doc ann
"F" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int
i
pretty FAbsReg
FArg0 = Doc ann
"D0"
pretty FAbsReg
FArg1 = Doc ann
"D1"
pretty FAbsReg
FArg2 = Doc ann
"D2"
pretty FAbsReg
FArg3 = Doc ann
"D3"
pretty FAbsReg
FArg4 = Doc ann
"D4"
pretty FAbsReg
FArg5 = Doc ann
"D5"
pretty FAbsReg
FArg6 = Doc ann
"D6"
pretty FAbsReg
FArg7 = Doc ann
"D7"
toInt :: AbsReg -> Int
toInt :: AbsReg -> Int
toInt AbsReg
CArg0 = Int
0
toInt AbsReg
CArg1 = Int
1
toInt AbsReg
CArg2 = Int
2
toInt AbsReg
CArg3 = Int
3
toInt AbsReg
CArg4 = Int
4
toInt AbsReg
CArg5 = Int
5
toInt AbsReg
CArg6 = Int
6
toInt AbsReg
CArg7 = Int
7
toInt AbsReg
LR = Int
8
toInt AbsReg
ASP = Int
9
toInt AbsReg
FP = Int
18
toInt (IReg Int
i) = Int
19Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
i
fToInt :: FAbsReg -> Int
fToInt :: FAbsReg -> Int
fToInt FAbsReg
FArg0 = Int
10
fToInt FAbsReg
FArg1 = Int
11
fToInt FAbsReg
FArg2 = Int
12
fToInt FAbsReg
FArg3 = Int
13
fToInt FAbsReg
FArg4 = Int
14
fToInt FAbsReg
FArg5 = Int
15
fToInt FAbsReg
FArg6 = Int
16
fToInt FAbsReg
FArg7 = Int
17
fToInt (FReg Int
i) = Int
19Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
i
data Shift = Zero | Three
instance NFData Shift where rnf :: Shift -> ()
rnf Shift
Zero = (); rnf Shift
Three = ()
instance Pretty Shift where
pretty :: forall ann. Shift -> Doc ann
pretty Shift
Zero = Doc ann
"#0"; pretty Shift
Three = Doc ann
"#3"
data BM = BM { BM -> Word8
ims, BM -> Word8
left :: !Word8 } deriving BM -> BM -> Bool
(BM -> BM -> Bool) -> (BM -> BM -> Bool) -> Eq BM
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BM -> BM -> Bool
== :: BM -> BM -> Bool
$c/= :: BM -> BM -> Bool
/= :: BM -> BM -> Bool
Eq
instance NFData BM where rnf :: BM -> ()
rnf (BM Word8
i Word8
ls) = Word8 -> ()
forall a. NFData a => a -> ()
rnf Word8
i () -> () -> ()
forall a b. a -> b -> b
`seq` Word8 -> ()
forall a. NFData a => a -> ()
rnf Word8
ls
instance Pretty BM where
pretty :: forall ann. BM -> Doc ann
pretty (BM Word8
m Word8
l) = Doc ann
"0b" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> [Char] -> Doc ann
forall ann. [Char] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Int -> Char -> [Char]
forall a. Int -> a -> [a]
replicate (Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
m) Char
'1' [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Int -> Char -> [Char]
forall a. Int -> a -> [a]
replicate (Word8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word8
l) Char
'0')
data Addr reg = R reg | RP reg Word16 | BI reg reg Shift deriving ((forall a b. (a -> b) -> Addr a -> Addr b)
-> (forall a b. a -> Addr b -> Addr a) -> Functor Addr
forall a b. a -> Addr b -> Addr a
forall a b. (a -> b) -> Addr a -> Addr b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> Addr a -> Addr b
fmap :: forall a b. (a -> b) -> Addr a -> Addr b
$c<$ :: forall a b. a -> Addr b -> Addr a
<$ :: forall a b. a -> Addr b -> Addr a
Functor, (forall x. Addr reg -> Rep (Addr reg) x)
-> (forall x. Rep (Addr reg) x -> Addr reg) -> Generic (Addr reg)
forall x. Rep (Addr reg) x -> Addr reg
forall x. Addr reg -> Rep (Addr reg) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall reg x. Rep (Addr reg) x -> Addr reg
forall reg x. Addr reg -> Rep (Addr reg) x
$cfrom :: forall reg x. Addr reg -> Rep (Addr reg) x
from :: forall x. Addr reg -> Rep (Addr reg) x
$cto :: forall reg x. Rep (Addr reg) x -> Addr reg
to :: forall x. Rep (Addr reg) x -> Addr reg
Generic)
instance NFData a => NFData (Addr a) where
instance Pretty reg => Pretty (Addr reg) where
pretty :: forall ann. Addr reg -> Doc ann
pretty (R reg
r) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets (reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r)
pretty (RP reg
r Word16
u) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets (reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word16 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word16
u)
pretty (BI reg
b reg
i Shift
s) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
brackets (reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
b Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
i Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"LSL" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Shift -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Shift -> Doc ann
pretty Shift
s)
data Cond = Eq | Neq | Geq | Lt | Gt | Leq
instance NFData Cond where rnf :: Cond -> ()
rnf Cond
Eq=(); rnf Cond
Neq=(); rnf Cond
Geq=(); rnf Cond
Lt=(); rnf Cond
Gt=(); rnf Cond
Leq=()
instance Pretty Cond where
pretty :: forall ann. Cond -> Doc ann
pretty Cond
Eq = Doc ann
"EQ"; pretty Cond
Neq = Doc ann
"NE"; pretty Cond
Geq = Doc ann
"GE"
pretty Cond
Lt = Doc ann
"LT"; pretty Cond
Gt = Doc ann
"GT"; pretty Cond
Leq = Doc ann
"LE"
pSym :: Pretty a => a -> Doc ann
pSym :: forall a ann. Pretty a => a -> Doc ann
pSym = case [Char]
os of {[Char]
"linux" -> Doc ann -> Doc ann
forall a. a -> a
id; [Char]
"darwin" -> (Doc ann
"_"Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<>)}(Doc ann -> Doc ann) -> (a -> Doc ann) -> a -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
.a -> Doc ann
forall ann. a -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty
data AArch64 reg freg a = Label { forall reg freg a. AArch64 reg freg a -> a
ann :: a, forall reg freg a. AArch64 reg freg a -> Label
label :: Label }
| B { ann :: a, label :: Label }
| Blr { ann :: a, forall reg freg a. AArch64 reg freg a -> reg
rSrc :: reg }
| C { ann :: a, label :: Label }
| Bl { ann :: a, forall reg freg a. AArch64 reg freg a -> CFunc
cfunc :: CFunc }
| Bc { ann :: a, forall reg freg a. AArch64 reg freg a -> Cond
cond :: Cond, label :: Label }
| Ret { ann :: a } | RetL { ann :: a, label :: Label }
| FMovXX { ann :: a, forall reg freg a. AArch64 reg freg a -> freg
dDest, forall reg freg a. AArch64 reg freg a -> freg
dSrc :: freg }
| FMovDR { ann :: a, dDest :: freg, rSrc :: reg }
| MovRR { ann :: a, forall reg freg a. AArch64 reg freg a -> reg
rDest, rSrc :: reg }
| MovRC { ann :: a, rDest :: reg, forall reg freg a. AArch64 reg freg a -> Word16
cSrc :: Word16 }
| MovZ { ann :: a, rDest :: reg, cSrc :: Word16, forall reg freg a. AArch64 reg freg a -> Int
lsl :: Int }
| MovRCf { ann :: a, rDest :: reg, cfunc :: CFunc }
| LdrRL { ann :: a, rDest :: reg, forall reg freg a. AArch64 reg freg a -> Int
lSrc :: Int }
| MovK { ann :: a, rDest :: reg, cSrc :: Word16, lsl :: Int }
| Ldr { ann :: a, rDest :: reg, forall reg freg a. AArch64 reg freg a -> Addr reg
aSrc :: Addr reg }
| LdrB { ann :: a, rDest :: reg, aSrc :: Addr reg }
| Str { ann :: a, rSrc :: reg, forall reg freg a. AArch64 reg freg a -> Addr reg
aDest :: Addr reg }
| StrB { ann :: a, rSrc :: reg, aDest :: Addr reg }
| LdrD { ann :: a, dDest :: freg, aSrc :: Addr reg }
| StrD { ann :: a, dSrc :: freg, aDest :: Addr reg }
| SubRR { ann :: a, rDest, forall reg freg a. AArch64 reg freg a -> reg
rSrc1, forall reg freg a. AArch64 reg freg a -> reg
rSrc2 :: reg }
| AddRR { ann :: a, rDest, rSrc1, rSrc2 :: reg }
| AddRRS { ann :: a, rDest, rSrc1, rSrc2 :: reg, forall reg freg a. AArch64 reg freg a -> Word8
sC :: Word8 }
| ZeroR { ann :: a, rDest :: reg }
| Mvn { ann :: a, rDest, rSrc :: reg }
| AndRR { ann :: a, rDest, rSrc1, rSrc2 :: reg }
| OrRR { ann :: a, rDest, rSrc1, rSrc2 :: reg }
| Eor { ann :: a, rDest, rSrc1, rSrc2 :: reg }
| MulRR { ann :: a, rDest, rSrc1, rSrc2 :: reg }
| Madd { ann :: a, rDest, rSrc1, rSrc2, forall reg freg a. AArch64 reg freg a -> reg
rSrc3 :: reg }
| Msub { ann :: a, rDest, rSrc1, rSrc2, rSrc3 :: reg }
| Sdiv { ann :: a, rDest, rSrc1, rSrc2 :: reg }
| AddRC { ann :: a, rDest, rSrc :: reg, forall reg freg a. AArch64 reg freg a -> Word16
rC :: Word16 }
| SubRC { ann :: a, rDest, rSrc :: reg, rC :: Word16 }
| Lsl { ann :: a, rDest, rSrc :: reg, sC :: Word8 }
| Asr { ann :: a, rDest, rSrc :: reg, sC :: Word8 }
| CmpRC { ann :: a, rSrc :: reg, cSrc :: Word16 }
| CmpRR { ann :: a, rSrc1, rSrc2 :: reg }
| Neg { ann :: a, rDest, rSrc :: reg }
| Fmul { ann :: a, dDest, forall reg freg a. AArch64 reg freg a -> freg
dSrc1, forall reg freg a. AArch64 reg freg a -> freg
dSrc2 :: freg }
| Fadd { ann :: a, dDest, dSrc1, dSrc2 :: freg }
| Fsub { ann :: a, dDest, dSrc1, dSrc2 :: freg }
| Fdiv { ann :: a, dDest, dSrc1, dSrc2 :: freg }
| FcmpZ { ann :: a, dSrc :: freg }
| Fcmp { ann :: a, dSrc1, dSrc2 :: freg }
| Fneg { ann :: a, dDest, dSrc :: freg }
| Scvtf { ann :: a, dDest :: freg, rSrc :: reg }
| Fcvtms { ann :: a, rDest :: reg, dSrc :: freg }
| Fcvtas { ann :: a, rDest :: reg, dSrc :: freg }
| Stp { ann :: a, rSrc1, rSrc2 :: reg, aDest :: Addr reg }
| Ldp { ann :: a, forall reg freg a. AArch64 reg freg a -> reg
rDest1, forall reg freg a. AArch64 reg freg a -> reg
rDest2 :: reg, aSrc :: Addr reg }
| StpD { ann :: a, dSrc1, dSrc2 :: freg, aDest :: Addr reg }
| LdpD { ann :: a, forall reg freg a. AArch64 reg freg a -> freg
dDest1, forall reg freg a. AArch64 reg freg a -> freg
dDest2 :: freg, aSrc :: Addr reg }
| Fmadd { ann :: a, dDest, dSrc1, dSrc2, forall reg freg a. AArch64 reg freg a -> freg
dSrc3 :: freg }
| Fmsub { ann :: a, dDest, dSrc1, dSrc2, dSrc3 :: freg }
| Fsqrt { ann :: a, dDest, dSrc :: freg }
| Frintm { ann :: a, dDest, dSrc :: freg }
| MrsR { ann :: a, rDest :: reg }
| Fmax { ann :: a, dDest, dSrc1, dSrc2 :: freg }
| Fmin { ann :: a, dDest, dSrc1, dSrc2 :: freg }
| Fabs { ann :: a, dDest, dSrc :: freg }
| Csel { ann :: a, rDest, rSrc1, rSrc2 :: reg, cond :: Cond }
| Tbnz { ann :: a, rSrc :: reg, forall reg freg a. AArch64 reg freg a -> Word8
bit :: Word8, label :: Label }
| Tbz { ann :: a, rSrc :: reg, bit :: Word8, label :: Label }
| Cbnz { ann :: a, rSrc :: reg, label :: Label }
| Fcsel { ann :: a, dDest, dSrc1, dSrc2 :: freg, cond :: Cond }
| Cset { ann :: a, rDest :: reg, cond :: Cond }
| TstI { ann :: a, rSrc1 :: reg, forall reg freg a. AArch64 reg freg a -> BM
imm :: BM }
| EorI { ann :: a, rSrc, forall reg freg a. AArch64 reg freg a -> reg
rDesg :: reg, imm :: BM }
deriving ((forall a b. (a -> b) -> AArch64 reg freg a -> AArch64 reg freg b)
-> (forall a b. a -> AArch64 reg freg b -> AArch64 reg freg a)
-> Functor (AArch64 reg freg)
forall a b. a -> AArch64 reg freg b -> AArch64 reg freg a
forall a b. (a -> b) -> AArch64 reg freg a -> AArch64 reg freg b
forall reg freg a b. a -> AArch64 reg freg b -> AArch64 reg freg a
forall reg freg a b.
(a -> b) -> AArch64 reg freg a -> AArch64 reg freg b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall reg freg a b.
(a -> b) -> AArch64 reg freg a -> AArch64 reg freg b
fmap :: forall a b. (a -> b) -> AArch64 reg freg a -> AArch64 reg freg b
$c<$ :: forall reg freg a b. a -> AArch64 reg freg b -> AArch64 reg freg a
<$ :: forall a b. a -> AArch64 reg freg b -> AArch64 reg freg a
Functor, (forall x. AArch64 reg freg a -> Rep (AArch64 reg freg a) x)
-> (forall x. Rep (AArch64 reg freg a) x -> AArch64 reg freg a)
-> Generic (AArch64 reg freg a)
forall x. Rep (AArch64 reg freg a) x -> AArch64 reg freg a
forall x. AArch64 reg freg a -> Rep (AArch64 reg freg a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall reg freg a x.
Rep (AArch64 reg freg a) x -> AArch64 reg freg a
forall reg freg a x.
AArch64 reg freg a -> Rep (AArch64 reg freg a) x
$cfrom :: forall reg freg a x.
AArch64 reg freg a -> Rep (AArch64 reg freg a) x
from :: forall x. AArch64 reg freg a -> Rep (AArch64 reg freg a) x
$cto :: forall reg freg a x.
Rep (AArch64 reg freg a) x -> AArch64 reg freg a
to :: forall x. Rep (AArch64 reg freg a) x -> AArch64 reg freg a
Generic)
instance (NFData r, NFData d, NFData a) => NFData (AArch64 r d a) where
instance Copointed (AArch64 reg freg) where copoint :: forall a. AArch64 reg freg a -> a
copoint = AArch64 reg freg a -> a
forall reg freg a. AArch64 reg freg a -> a
ann
mapR :: (areg -> reg) -> AArch64 areg afreg a -> AArch64 reg afreg a
mapR :: forall areg reg afreg a.
(areg -> reg) -> AArch64 areg afreg a -> AArch64 reg afreg a
mapR areg -> reg
_ (Label a
x Label
l) = a -> Label -> AArch64 reg afreg a
forall reg freg a. a -> Label -> AArch64 reg freg a
Label a
x Label
l
mapR areg -> reg
_ (B a
x Label
l) = a -> Label -> AArch64 reg afreg a
forall reg freg a. a -> Label -> AArch64 reg freg a
B a
x Label
l
mapR areg -> reg
_ (Bc a
x Cond
c Label
l) = a -> Cond -> Label -> AArch64 reg afreg a
forall reg freg a. a -> Cond -> Label -> AArch64 reg freg a
Bc a
x Cond
c Label
l
mapR areg -> reg
_ (Bl a
x CFunc
f) = a -> CFunc -> AArch64 reg afreg a
forall reg freg a. a -> CFunc -> AArch64 reg freg a
Bl a
x CFunc
f
mapR areg -> reg
_ (C a
x Label
l) = a -> Label -> AArch64 reg afreg a
forall reg freg a. a -> Label -> AArch64 reg freg a
C a
x Label
l
mapR areg -> reg
_ (FMovXX a
l afreg
r0 afreg
r1) = a -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
FMovXX a
l afreg
r0 afreg
r1
mapR areg -> reg
f (MovRR a
l areg
r0 areg
r1) = a -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> AArch64 reg freg a
MovRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (MovRC a
l areg
r Word16
c) = a -> reg -> Word16 -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Word16 -> AArch64 reg freg a
MovRC a
l (areg -> reg
f areg
r) Word16
c
mapR areg -> reg
f (Ldr a
l areg
r Addr areg
a) = a -> reg -> Addr reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
Ldr a
l (areg -> reg
f areg
r) (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
f (LdrB a
l areg
r Addr areg
a) = a -> reg -> Addr reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
LdrB a
l (areg -> reg
f areg
r) (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
f (Str a
l areg
r Addr areg
a) = a -> reg -> Addr reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
Str a
l (areg -> reg
f areg
r) (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
f (StrB a
l areg
r Addr areg
a) = a -> reg -> Addr reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
StrB a
l (areg -> reg
f areg
r) (areg -> reg
f(areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>Addr areg
a)
mapR areg -> reg
f (LdrD a
l afreg
xr Addr areg
a) = a -> afreg -> Addr reg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> Addr reg -> AArch64 reg freg a
LdrD a
l afreg
xr (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
f (AddRR a
l areg
r0 areg
r1 areg
r2) = a -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
AddRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2)
mapR areg -> reg
f (AddRRS a
l areg
r0 areg
r1 areg
r2 Word8
s) = a -> reg -> reg -> reg -> Word8 -> AArch64 reg afreg a
forall reg freg a.
a -> reg -> reg -> reg -> Word8 -> AArch64 reg freg a
AddRRS a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2) Word8
s
mapR areg -> reg
f (SubRR a
l areg
r0 areg
r1 areg
r2) = a -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
SubRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2)
mapR areg -> reg
f (AddRC a
l areg
r0 areg
r1 Word16
c) = a -> reg -> reg -> Word16 -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
AddRC a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) Word16
c
mapR areg -> reg
f (SubRC a
l areg
r0 areg
r1 Word16
c) = a -> reg -> reg -> Word16 -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
SubRC a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) Word16
c
mapR areg -> reg
f (ZeroR a
l areg
r) = a -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> AArch64 reg freg a
ZeroR a
l (areg -> reg
f areg
r)
mapR areg -> reg
f (Mvn a
l areg
r0 areg
r1) = a -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> AArch64 reg freg a
Mvn a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (AndRR a
l areg
r0 areg
r1 areg
r2) = a -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
AndRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2)
mapR areg -> reg
f (OrRR a
l areg
r0 areg
r1 areg
r2) = a -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
OrRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2)
mapR areg -> reg
f (Eor a
l areg
r0 areg
r1 areg
r2) = a -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
Eor a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2)
mapR areg -> reg
f (Lsl a
l areg
r0 areg
r1 Word8
s) = a -> reg -> reg -> Word8 -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> Word8 -> AArch64 reg freg a
Lsl a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) Word8
s
mapR areg -> reg
f (Asr a
l areg
r0 areg
r1 Word8
s) = a -> reg -> reg -> Word8 -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> Word8 -> AArch64 reg freg a
Asr a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) Word8
s
mapR areg -> reg
f (CmpRR a
l areg
r0 areg
r1) = a -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> AArch64 reg freg a
CmpRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (CmpRC a
l areg
r Word16
c) = a -> reg -> Word16 -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Word16 -> AArch64 reg freg a
CmpRC a
l (areg -> reg
f areg
r) Word16
c
mapR areg -> reg
f (Neg a
l areg
r0 areg
r1) = a -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> AArch64 reg freg a
Neg a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
_ (Fadd a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> afreg -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fadd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Fsub a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> afreg -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fsub a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Fmul a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> afreg -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fmul a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Fneg a
l afreg
xr0 afreg
xr1) = a -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Fneg a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (FcmpZ a
l afreg
xr) = a -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> AArch64 reg freg a
FcmpZ a
l afreg
xr
mapR areg -> reg
_ (Ret a
l) = a -> AArch64 reg afreg a
forall reg freg a. a -> AArch64 reg freg a
Ret a
l
mapR areg -> reg
_ (RetL a
x Label
l) = a -> Label -> AArch64 reg afreg a
forall reg freg a. a -> Label -> AArch64 reg freg a
RetL a
x Label
l
mapR areg -> reg
f (MulRR a
l areg
r0 areg
r1 areg
r2) = a -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
MulRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2)
mapR areg -> reg
f (Madd a
l areg
r0 areg
r1 areg
r2 areg
r3) = a -> reg -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a.
a -> reg -> reg -> reg -> reg -> AArch64 reg freg a
Madd a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2) (areg -> reg
f areg
r3)
mapR areg -> reg
f (Msub a
l areg
r0 areg
r1 areg
r2 areg
r3) = a -> reg -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a.
a -> reg -> reg -> reg -> reg -> AArch64 reg freg a
Msub a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2) (areg -> reg
f areg
r3)
mapR areg -> reg
f (Sdiv a
l areg
r0 areg
r1 areg
r2) = a -> reg -> reg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
Sdiv a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2)
mapR areg -> reg
f (StrD a
l afreg
d Addr areg
a) = a -> afreg -> Addr reg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> Addr reg -> AArch64 reg freg a
StrD a
l afreg
d (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
_ (Fdiv a
l afreg
d0 afreg
d1 afreg
d2) = a -> afreg -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fdiv a
l afreg
d0 afreg
d1 afreg
d2
mapR areg -> reg
f (Scvtf a
l afreg
d areg
r) = a -> afreg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> reg -> AArch64 reg freg a
Scvtf a
l afreg
d (areg -> reg
f areg
r)
mapR areg -> reg
f (Fcvtms a
l areg
r afreg
d) = a -> reg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> freg -> AArch64 reg freg a
Fcvtms a
l (areg -> reg
f areg
r) afreg
d
mapR areg -> reg
f (Fcvtas a
l areg
r afreg
d) = a -> reg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> freg -> AArch64 reg freg a
Fcvtas a
l (areg -> reg
f areg
r) afreg
d
mapR areg -> reg
f (MovK a
l areg
r Word16
u Int
s) = a -> reg -> Word16 -> Int -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Word16 -> Int -> AArch64 reg freg a
MovK a
l (areg -> reg
f areg
r) Word16
u Int
s
mapR areg -> reg
f (MovZ a
l areg
r Word16
u Int
s) = a -> reg -> Word16 -> Int -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Word16 -> Int -> AArch64 reg freg a
MovZ a
l (areg -> reg
f areg
r) Word16
u Int
s
mapR areg -> reg
f (FMovDR a
l afreg
d areg
r) = a -> afreg -> reg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> reg -> AArch64 reg freg a
FMovDR a
l afreg
d (areg -> reg
f areg
r)
mapR areg -> reg
_ (Fcmp a
l afreg
d0 afreg
d1) = a -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Fcmp a
l afreg
d0 afreg
d1
mapR areg -> reg
f (Ldp a
l areg
r0 areg
r1 Addr areg
a) = a -> reg -> reg -> Addr reg -> AArch64 reg afreg a
forall reg freg a.
a -> reg -> reg -> Addr reg -> AArch64 reg freg a
Ldp a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
f (Stp a
l areg
r0 areg
r1 Addr areg
a) = a -> reg -> reg -> Addr reg -> AArch64 reg afreg a
forall reg freg a.
a -> reg -> reg -> Addr reg -> AArch64 reg freg a
Stp a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
f (LdpD a
l afreg
d0 afreg
d1 Addr areg
a) = a -> afreg -> afreg -> Addr reg -> AArch64 reg afreg a
forall reg freg a.
a -> freg -> freg -> Addr reg -> AArch64 reg freg a
LdpD a
l afreg
d0 afreg
d1 (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
f (StpD a
l afreg
d0 afreg
d1 Addr areg
a) = a -> afreg -> afreg -> Addr reg -> AArch64 reg afreg a
forall reg freg a.
a -> freg -> freg -> Addr reg -> AArch64 reg freg a
StpD a
l afreg
d0 afreg
d1 (areg -> reg
f (areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Addr areg
a)
mapR areg -> reg
_ (Fmadd a
l afreg
d0 afreg
d1 afreg
d2 afreg
d3) = a -> afreg -> afreg -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a.
a -> freg -> freg -> freg -> freg -> AArch64 reg freg a
Fmadd a
l afreg
d0 afreg
d1 afreg
d2 afreg
d3
mapR areg -> reg
_ (Fmsub a
l afreg
d0 afreg
d1 afreg
d2 afreg
d3) = a -> afreg -> afreg -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a.
a -> freg -> freg -> freg -> freg -> AArch64 reg freg a
Fmsub a
l afreg
d0 afreg
d1 afreg
d2 afreg
d3
mapR areg -> reg
_ (Fsqrt a
l afreg
d0 afreg
d1) = a -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Fsqrt a
l afreg
d0 afreg
d1
mapR areg -> reg
_ (Frintm a
l afreg
d0 afreg
d1) = a -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Frintm a
l afreg
d0 afreg
d1
mapR areg -> reg
f (MrsR a
l areg
r) = a -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> AArch64 reg freg a
MrsR a
l (areg -> reg
f areg
r)
mapR areg -> reg
f (MovRCf a
l areg
r CFunc
cf) = a -> reg -> CFunc -> AArch64 reg afreg a
forall reg freg a. a -> reg -> CFunc -> AArch64 reg freg a
MovRCf a
l (areg -> reg
f areg
r) CFunc
cf
mapR areg -> reg
f (LdrRL a
x areg
r Int
l) = a -> reg -> Int -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Int -> AArch64 reg freg a
LdrRL a
x (areg -> reg
f areg
r) Int
l
mapR areg -> reg
f (Blr a
l areg
r) = a -> reg -> AArch64 reg afreg a
forall reg freg a. a -> reg -> AArch64 reg freg a
Blr a
l (areg -> reg
f areg
r)
mapR areg -> reg
_ (Fmax a
l afreg
d0 afreg
d1 afreg
d2) = a -> afreg -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fmax a
l afreg
d0 afreg
d1 afreg
d2
mapR areg -> reg
_ (Fmin a
l afreg
d0 afreg
d1 afreg
d2) = a -> afreg -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fmin a
l afreg
d0 afreg
d1 afreg
d2
mapR areg -> reg
_ (Fabs a
l afreg
d0 afreg
d1) = a -> afreg -> afreg -> AArch64 reg afreg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Fabs a
l afreg
d0 afreg
d1
mapR areg -> reg
f (Csel a
l areg
r0 areg
r1 areg
r2 Cond
p) = a -> reg -> reg -> reg -> Cond -> AArch64 reg afreg a
forall reg freg a.
a -> reg -> reg -> reg -> Cond -> AArch64 reg freg a
Csel a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) (areg -> reg
f areg
r2) Cond
p
mapR areg -> reg
f (Tbnz a
l areg
r Word8
n Label
p) = a -> reg -> Word8 -> Label -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Word8 -> Label -> AArch64 reg freg a
Tbnz a
l (areg -> reg
f areg
r) Word8
n Label
p
mapR areg -> reg
f (Tbz a
l areg
r Word8
n Label
p) = a -> reg -> Word8 -> Label -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Word8 -> Label -> AArch64 reg freg a
Tbz a
l (areg -> reg
f areg
r) Word8
n Label
p
mapR areg -> reg
f (Cbnz a
x areg
r Label
l) = a -> reg -> Label -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Label -> AArch64 reg freg a
Cbnz a
x (areg -> reg
f areg
r) Label
l
mapR areg -> reg
_ (Fcsel a
l afreg
d0 afreg
d1 afreg
d2 Cond
p) = a -> afreg -> afreg -> afreg -> Cond -> AArch64 reg afreg a
forall reg freg a.
a -> freg -> freg -> freg -> Cond -> AArch64 reg freg a
Fcsel a
l afreg
d0 afreg
d1 afreg
d2 Cond
p
mapR areg -> reg
f (TstI a
l areg
r BM
i) = a -> reg -> BM -> AArch64 reg afreg a
forall reg freg a. a -> reg -> BM -> AArch64 reg freg a
TstI a
l (areg -> reg
f areg
r) BM
i
mapR areg -> reg
f (Cset a
l areg
r Cond
c) = a -> reg -> Cond -> AArch64 reg afreg a
forall reg freg a. a -> reg -> Cond -> AArch64 reg freg a
Cset a
l (areg -> reg
f areg
r) Cond
c
mapR areg -> reg
f (EorI a
l areg
r0 areg
r1 BM
i) = a -> reg -> reg -> BM -> AArch64 reg afreg a
forall reg freg a. a -> reg -> reg -> BM -> AArch64 reg freg a
EorI a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1) BM
i
mapFR :: (afreg -> freg) -> AArch64 areg afreg a -> AArch64 areg freg a
mapFR :: forall afreg freg areg a.
(afreg -> freg) -> AArch64 areg afreg a -> AArch64 areg freg a
mapFR afreg -> freg
_ (Label a
x Label
l) = a -> Label -> AArch64 areg freg a
forall reg freg a. a -> Label -> AArch64 reg freg a
Label a
x Label
l
mapFR afreg -> freg
_ (B a
x Label
l) = a -> Label -> AArch64 areg freg a
forall reg freg a. a -> Label -> AArch64 reg freg a
B a
x Label
l
mapFR afreg -> freg
_ (Bc a
x Cond
c Label
l) = a -> Cond -> Label -> AArch64 areg freg a
forall reg freg a. a -> Cond -> Label -> AArch64 reg freg a
Bc a
x Cond
c Label
l
mapFR afreg -> freg
_ (Bl a
x CFunc
f) = a -> CFunc -> AArch64 areg freg a
forall reg freg a. a -> CFunc -> AArch64 reg freg a
Bl a
x CFunc
f
mapFR afreg -> freg
_ (C a
x Label
l) = a -> Label -> AArch64 areg freg a
forall reg freg a. a -> Label -> AArch64 reg freg a
C a
x Label
l
mapFR afreg -> freg
f (FMovXX a
l afreg
xr0 afreg
xr1) = a -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
FMovXX a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1)
mapFR afreg -> freg
_ (MovRR a
l areg
r0 areg
r1) = a -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> AArch64 reg freg a
MovRR a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (MovRC a
l areg
r0 Word16
c) = a -> areg -> Word16 -> AArch64 areg freg a
forall reg freg a. a -> reg -> Word16 -> AArch64 reg freg a
MovRC a
l areg
r0 Word16
c
mapFR afreg -> freg
_ (Ldr a
l areg
r Addr areg
a) = a -> areg -> Addr areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
Ldr a
l areg
r Addr areg
a
mapFR afreg -> freg
_ (LdrB a
l areg
r Addr areg
a) = a -> areg -> Addr areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
LdrB a
l areg
r Addr areg
a
mapFR afreg -> freg
_ (Str a
l areg
r Addr areg
a) = a -> areg -> Addr areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
Str a
l areg
r Addr areg
a
mapFR afreg -> freg
_ (StrB a
l areg
r Addr areg
a) = a -> areg -> Addr areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
StrB a
l areg
r Addr areg
a
mapFR afreg -> freg
f (LdrD a
l afreg
xr Addr areg
a) = a -> freg -> Addr areg -> AArch64 areg freg a
forall reg freg a. a -> freg -> Addr reg -> AArch64 reg freg a
LdrD a
l (afreg -> freg
f afreg
xr) Addr areg
a
mapFR afreg -> freg
_ (AddRR a
l areg
r0 areg
r1 areg
r2) = a -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
AddRR a
l areg
r0 areg
r1 areg
r2
mapFR afreg -> freg
_ (AddRRS a
l areg
r0 areg
r1 areg
r2 Word8
s) = a -> areg -> areg -> areg -> Word8 -> AArch64 areg freg a
forall reg freg a.
a -> reg -> reg -> reg -> Word8 -> AArch64 reg freg a
AddRRS a
l areg
r0 areg
r1 areg
r2 Word8
s
mapFR afreg -> freg
_ (AddRC a
l areg
r0 areg
r1 Word16
c) = a -> areg -> areg -> Word16 -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
AddRC a
l areg
r0 areg
r1 Word16
c
mapFR afreg -> freg
_ (SubRR a
l areg
r0 areg
r1 areg
r2) = a -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
SubRR a
l areg
r0 areg
r1 areg
r2
mapFR afreg -> freg
_ (SubRC a
l areg
r0 areg
r1 Word16
c) = a -> areg -> areg -> Word16 -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
SubRC a
l areg
r0 areg
r1 Word16
c
mapFR afreg -> freg
_ (ZeroR a
l areg
r) = a -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> AArch64 reg freg a
ZeroR a
l areg
r
mapFR afreg -> freg
_ (Mvn a
l areg
r0 areg
r1) = a -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> AArch64 reg freg a
Mvn a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (AndRR a
l areg
r0 areg
r1 areg
r2) = a -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
AndRR a
l areg
r0 areg
r1 areg
r2
mapFR afreg -> freg
_ (OrRR a
l areg
r0 areg
r1 areg
r2) = a -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
OrRR a
l areg
r0 areg
r1 areg
r2
mapFR afreg -> freg
_ (Eor a
l areg
r0 areg
r1 areg
r2) = a -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
Eor a
l areg
r0 areg
r1 areg
r2
mapFR afreg -> freg
_ (EorI a
l areg
r0 areg
r1 BM
i) = a -> areg -> areg -> BM -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> BM -> AArch64 reg freg a
EorI a
l areg
r0 areg
r1 BM
i
mapFR afreg -> freg
_ (Lsl a
l areg
r0 areg
r1 Word8
s) = a -> areg -> areg -> Word8 -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> Word8 -> AArch64 reg freg a
Lsl a
l areg
r0 areg
r1 Word8
s
mapFR afreg -> freg
_ (Asr a
l areg
r0 areg
r1 Word8
s) = a -> areg -> areg -> Word8 -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> Word8 -> AArch64 reg freg a
Asr a
l areg
r0 areg
r1 Word8
s
mapFR afreg -> freg
_ (CmpRC a
l areg
r Word16
c) = a -> areg -> Word16 -> AArch64 areg freg a
forall reg freg a. a -> reg -> Word16 -> AArch64 reg freg a
CmpRC a
l areg
r Word16
c
mapFR afreg -> freg
_ (CmpRR a
l areg
r0 areg
r1) = a -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> AArch64 reg freg a
CmpRR a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (Neg a
l areg
r0 areg
r1) = a -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> AArch64 reg freg a
Neg a
l areg
r0 areg
r1
mapFR afreg -> freg
f (Fmul a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> freg -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fmul a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Fadd a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> freg -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fadd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Fsub a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> freg -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fsub a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (FcmpZ a
l afreg
xr) = a -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> AArch64 reg freg a
FcmpZ a
l (afreg -> freg
f afreg
xr)
mapFR afreg -> freg
_ (Ret a
l) = a -> AArch64 areg freg a
forall reg freg a. a -> AArch64 reg freg a
Ret a
l
mapFR afreg -> freg
_ (RetL a
x Label
l) = a -> Label -> AArch64 areg freg a
forall reg freg a. a -> Label -> AArch64 reg freg a
RetL a
x Label
l
mapFR afreg -> freg
f (Fdiv a
l afreg
d0 afreg
d1 afreg
d2) = a -> freg -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fdiv a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1) (afreg -> freg
f afreg
d2)
mapFR afreg -> freg
_ (MulRR a
l areg
r0 areg
r1 areg
r2) = a -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
MulRR a
l areg
r0 areg
r1 areg
r2
mapFR afreg -> freg
_ (Madd a
l areg
r0 areg
r1 areg
r2 areg
r3) = a -> areg -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a.
a -> reg -> reg -> reg -> reg -> AArch64 reg freg a
Madd a
l areg
r0 areg
r1 areg
r2 areg
r3
mapFR afreg -> freg
_ (Msub a
l areg
r0 areg
r1 areg
r2 areg
r3) = a -> areg -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a.
a -> reg -> reg -> reg -> reg -> AArch64 reg freg a
Msub a
l areg
r0 areg
r1 areg
r2 areg
r3
mapFR afreg -> freg
_ (Sdiv a
l areg
r0 areg
r1 areg
r2) = a -> areg -> areg -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> reg -> reg -> AArch64 reg freg a
Sdiv a
l areg
r0 areg
r1 areg
r2
mapFR afreg -> freg
f (StrD a
l afreg
d Addr areg
a) = a -> freg -> Addr areg -> AArch64 areg freg a
forall reg freg a. a -> freg -> Addr reg -> AArch64 reg freg a
StrD a
l (afreg -> freg
f afreg
d) Addr areg
a
mapFR afreg -> freg
f (Scvtf a
l afreg
d areg
r) = a -> freg -> areg -> AArch64 areg freg a
forall reg freg a. a -> freg -> reg -> AArch64 reg freg a
Scvtf a
l (afreg -> freg
f afreg
d) areg
r
mapFR afreg -> freg
f (Fcvtms a
l areg
r afreg
d) = a -> areg -> freg -> AArch64 areg freg a
forall reg freg a. a -> reg -> freg -> AArch64 reg freg a
Fcvtms a
l areg
r (afreg -> freg
f afreg
d)
mapFR afreg -> freg
f (Fcvtas a
l areg
r afreg
d) = a -> areg -> freg -> AArch64 areg freg a
forall reg freg a. a -> reg -> freg -> AArch64 reg freg a
Fcvtas a
l areg
r (afreg -> freg
f afreg
d)
mapFR afreg -> freg
_ (MovK a
l areg
r Word16
u Int
s) = a -> areg -> Word16 -> Int -> AArch64 areg freg a
forall reg freg a. a -> reg -> Word16 -> Int -> AArch64 reg freg a
MovK a
l areg
r Word16
u Int
s
mapFR afreg -> freg
_ (MovZ a
l areg
r Word16
u Int
s) = a -> areg -> Word16 -> Int -> AArch64 areg freg a
forall reg freg a. a -> reg -> Word16 -> Int -> AArch64 reg freg a
MovZ a
l areg
r Word16
u Int
s
mapFR afreg -> freg
f (FMovDR a
l afreg
d areg
r) = a -> freg -> areg -> AArch64 areg freg a
forall reg freg a. a -> freg -> reg -> AArch64 reg freg a
FMovDR a
l (afreg -> freg
f afreg
d) areg
r
mapFR afreg -> freg
f (Fcmp a
l afreg
d0 afreg
d1) = a -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Fcmp a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1)
mapFR afreg -> freg
_ (Stp a
l areg
r0 areg
r1 Addr areg
a) = a -> areg -> areg -> Addr areg -> AArch64 areg freg a
forall reg freg a.
a -> reg -> reg -> Addr reg -> AArch64 reg freg a
Stp a
l areg
r0 areg
r1 Addr areg
a
mapFR afreg -> freg
_ (Ldp a
l areg
r0 areg
r1 Addr areg
a) = a -> areg -> areg -> Addr areg -> AArch64 areg freg a
forall reg freg a.
a -> reg -> reg -> Addr reg -> AArch64 reg freg a
Ldp a
l areg
r0 areg
r1 Addr areg
a
mapFR afreg -> freg
f (StpD a
l afreg
d0 afreg
d1 Addr areg
a) = a -> freg -> freg -> Addr areg -> AArch64 areg freg a
forall reg freg a.
a -> freg -> freg -> Addr reg -> AArch64 reg freg a
StpD a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1) Addr areg
a
mapFR afreg -> freg
f (LdpD a
l afreg
d0 afreg
d1 Addr areg
a) = a -> freg -> freg -> Addr areg -> AArch64 areg freg a
forall reg freg a.
a -> freg -> freg -> Addr reg -> AArch64 reg freg a
LdpD a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1) Addr areg
a
mapFR afreg -> freg
f (Fmadd a
l afreg
d0 afreg
d1 afreg
d2 afreg
d3) = a -> freg -> freg -> freg -> freg -> AArch64 areg freg a
forall reg freg a.
a -> freg -> freg -> freg -> freg -> AArch64 reg freg a
Fmadd a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1) (afreg -> freg
f afreg
d2) (afreg -> freg
f afreg
d3)
mapFR afreg -> freg
f (Fmsub a
l afreg
d0 afreg
d1 afreg
d2 afreg
d3) = a -> freg -> freg -> freg -> freg -> AArch64 areg freg a
forall reg freg a.
a -> freg -> freg -> freg -> freg -> AArch64 reg freg a
Fmsub a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1) (afreg -> freg
f afreg
d2) (afreg -> freg
f afreg
d3)
mapFR afreg -> freg
f (Fsqrt a
l afreg
d0 afreg
d1) = a -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Fsqrt a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1)
mapFR afreg -> freg
f (Fneg a
l afreg
d0 afreg
d1) = a -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Fneg a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1)
mapFR afreg -> freg
f (Frintm a
l afreg
d0 afreg
d1) = a -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Frintm a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1)
mapFR afreg -> freg
_ (MrsR a
l areg
r) = a -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> AArch64 reg freg a
MrsR a
l areg
r
mapFR afreg -> freg
_ (Blr a
l areg
r) = a -> areg -> AArch64 areg freg a
forall reg freg a. a -> reg -> AArch64 reg freg a
Blr a
l areg
r
mapFR afreg -> freg
_ (MovRCf a
l areg
r CFunc
cf) = a -> areg -> CFunc -> AArch64 areg freg a
forall reg freg a. a -> reg -> CFunc -> AArch64 reg freg a
MovRCf a
l areg
r CFunc
cf
mapFR afreg -> freg
_ (LdrRL a
x areg
r Int
l) = a -> areg -> Int -> AArch64 areg freg a
forall reg freg a. a -> reg -> Int -> AArch64 reg freg a
LdrRL a
x areg
r Int
l
mapFR afreg -> freg
f (Fmax a
l afreg
d0 afreg
d1 afreg
d2) = a -> freg -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fmax a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1) (afreg -> freg
f afreg
d2)
mapFR afreg -> freg
f (Fmin a
l afreg
d0 afreg
d1 afreg
d2) = a -> freg -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> freg -> AArch64 reg freg a
Fmin a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1) (afreg -> freg
f afreg
d2)
mapFR afreg -> freg
f (Fabs a
l afreg
d0 afreg
d1) = a -> freg -> freg -> AArch64 areg freg a
forall reg freg a. a -> freg -> freg -> AArch64 reg freg a
Fabs a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1)
mapFR afreg -> freg
_ (Csel a
l areg
r0 areg
r1 areg
r2 Cond
p) = a -> areg -> areg -> areg -> Cond -> AArch64 areg freg a
forall reg freg a.
a -> reg -> reg -> reg -> Cond -> AArch64 reg freg a
Csel a
l areg
r0 areg
r1 areg
r2 Cond
p
mapFR afreg -> freg
_ (Tbnz a
l areg
r Word8
n Label
p) = a -> areg -> Word8 -> Label -> AArch64 areg freg a
forall reg freg a. a -> reg -> Word8 -> Label -> AArch64 reg freg a
Tbnz a
l areg
r Word8
n Label
p
mapFR afreg -> freg
_ (Tbz a
l areg
r Word8
n Label
p) = a -> areg -> Word8 -> Label -> AArch64 areg freg a
forall reg freg a. a -> reg -> Word8 -> Label -> AArch64 reg freg a
Tbz a
l areg
r Word8
n Label
p
mapFR afreg -> freg
_ (Cbnz a
x areg
r Label
l) = a -> areg -> Label -> AArch64 areg freg a
forall reg freg a. a -> reg -> Label -> AArch64 reg freg a
Cbnz a
x areg
r Label
l
mapFR afreg -> freg
f (Fcsel a
l afreg
d0 afreg
d1 afreg
d2 Cond
p) = a -> freg -> freg -> freg -> Cond -> AArch64 areg freg a
forall reg freg a.
a -> freg -> freg -> freg -> Cond -> AArch64 reg freg a
Fcsel a
l (afreg -> freg
f afreg
d0) (afreg -> freg
f afreg
d1) (afreg -> freg
f afreg
d2) Cond
p
mapFR afreg -> freg
_ (TstI a
l areg
r BM
i) = a -> areg -> BM -> AArch64 areg freg a
forall reg freg a. a -> reg -> BM -> AArch64 reg freg a
TstI a
l areg
r BM
i
mapFR afreg -> freg
_ (Cset a
l areg
r Cond
c) = a -> areg -> Cond -> AArch64 areg freg a
forall reg freg a. a -> reg -> Cond -> AArch64 reg freg a
Cset a
l areg
r Cond
c
s2 :: [a] -> [(a, Maybe a)]
s2 :: forall a. [a] -> [(a, Maybe a)]
s2 (a
r0:a
r1:[a]
rs) = (a
r0, a -> Maybe a
forall a. a -> Maybe a
Just a
r1)(a, Maybe a) -> [(a, Maybe a)] -> [(a, Maybe a)]
forall a. a -> [a] -> [a]
:[a] -> [(a, Maybe a)]
forall a. [a] -> [(a, Maybe a)]
s2 [a]
rs
s2 [a
r] = [(a
r, Maybe a
forall a. Maybe a
Nothing)]
s2 [] = []
pus, pos :: [AReg] -> [AArch64 AReg freg ()]
pus :: forall freg. [AReg] -> [AArch64 AReg freg ()]
pus = ((AReg, Maybe AReg) -> [AArch64 AReg freg ()])
-> [(AReg, Maybe AReg)] -> [AArch64 AReg freg ()]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (AReg, Maybe AReg) -> [AArch64 AReg freg ()]
forall {freg}. (AReg, Maybe AReg) -> [AArch64 AReg freg ()]
go([(AReg, Maybe AReg)] -> [AArch64 AReg freg ()])
-> ([AReg] -> [(AReg, Maybe AReg)])
-> [AReg]
-> [AArch64 AReg freg ()]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[AReg] -> [(AReg, Maybe AReg)]
forall a. [a] -> [(a, Maybe a)]
s2 where go :: (AReg, Maybe AReg) -> [AArch64 AReg freg ()]
go (AReg
r0, Just AReg
r1) = [() -> AReg -> AReg -> Word16 -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
SubRC () AReg
SP AReg
SP Word16
16, () -> AReg -> AReg -> Addr AReg -> AArch64 AReg freg ()
forall reg freg a.
a -> reg -> reg -> Addr reg -> AArch64 reg freg a
Stp () AReg
r0 AReg
r1 (AReg -> Addr AReg
forall reg. reg -> Addr reg
R AReg
SP)]; go (AReg
r, Maybe AReg
Nothing) = [() -> AReg -> AReg -> Word16 -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
SubRC () AReg
SP AReg
SP Word16
16, () -> AReg -> Addr AReg -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
Str () AReg
r (AReg -> Addr AReg
forall reg. reg -> Addr reg
R AReg
SP)]
pos :: forall freg. [AReg] -> [AArch64 AReg freg ()]
pos = ((AReg, Maybe AReg) -> [AArch64 AReg freg ()])
-> [(AReg, Maybe AReg)] -> [AArch64 AReg freg ()]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (AReg, Maybe AReg) -> [AArch64 AReg freg ()]
forall {freg}. (AReg, Maybe AReg) -> [AArch64 AReg freg ()]
go([(AReg, Maybe AReg)] -> [AArch64 AReg freg ()])
-> ([AReg] -> [(AReg, Maybe AReg)])
-> [AReg]
-> [AArch64 AReg freg ()]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[(AReg, Maybe AReg)] -> [(AReg, Maybe AReg)]
forall a. [a] -> [a]
reverse([(AReg, Maybe AReg)] -> [(AReg, Maybe AReg)])
-> ([AReg] -> [(AReg, Maybe AReg)])
-> [AReg]
-> [(AReg, Maybe AReg)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[AReg] -> [(AReg, Maybe AReg)]
forall a. [a] -> [(a, Maybe a)]
s2 where go :: (AReg, Maybe AReg) -> [AArch64 AReg freg ()]
go (AReg
r0, Just AReg
r1) = [() -> AReg -> AReg -> Addr AReg -> AArch64 AReg freg ()
forall reg freg a.
a -> reg -> reg -> Addr reg -> AArch64 reg freg a
Ldp () AReg
r0 AReg
r1 (AReg -> Addr AReg
forall reg. reg -> Addr reg
R AReg
SP), () -> AReg -> AReg -> Word16 -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
AddRC () AReg
SP AReg
SP Word16
16]; go (AReg
r, Maybe AReg
Nothing) = [() -> AReg -> Addr AReg -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> Addr reg -> AArch64 reg freg a
Ldr () AReg
r (AReg -> Addr AReg
forall reg. reg -> Addr reg
R AReg
SP), () -> AReg -> AReg -> Word16 -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
AddRC () AReg
SP AReg
SP Word16
16]
puds, pods :: [freg] -> [AArch64 AReg freg ()]
puds :: forall freg. [freg] -> [AArch64 AReg freg ()]
puds = ((freg, Maybe freg) -> [AArch64 AReg freg ()])
-> [(freg, Maybe freg)] -> [AArch64 AReg freg ()]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (freg, Maybe freg) -> [AArch64 AReg freg ()]
forall {freg}. (freg, Maybe freg) -> [AArch64 AReg freg ()]
go([(freg, Maybe freg)] -> [AArch64 AReg freg ()])
-> ([freg] -> [(freg, Maybe freg)])
-> [freg]
-> [AArch64 AReg freg ()]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[freg] -> [(freg, Maybe freg)]
forall a. [a] -> [(a, Maybe a)]
s2 where go :: (freg, Maybe freg) -> [AArch64 AReg freg ()]
go (freg
r0, Just freg
r1) = [() -> AReg -> AReg -> Word16 -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
SubRC () AReg
SP AReg
SP Word16
16, () -> freg -> freg -> Addr AReg -> AArch64 AReg freg ()
forall reg freg a.
a -> freg -> freg -> Addr reg -> AArch64 reg freg a
StpD () freg
r0 freg
r1 (AReg -> Addr AReg
forall reg. reg -> Addr reg
R AReg
SP)]; go (freg
r, Maybe freg
Nothing) = [() -> AReg -> AReg -> Word16 -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
SubRC () AReg
SP AReg
SP Word16
16, () -> freg -> Addr AReg -> AArch64 AReg freg ()
forall reg freg a. a -> freg -> Addr reg -> AArch64 reg freg a
StrD () freg
r (AReg -> Addr AReg
forall reg. reg -> Addr reg
R AReg
SP)]
pods :: forall freg. [freg] -> [AArch64 AReg freg ()]
pods = ((freg, Maybe freg) -> [AArch64 AReg freg ()])
-> [(freg, Maybe freg)] -> [AArch64 AReg freg ()]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (freg, Maybe freg) -> [AArch64 AReg freg ()]
forall {freg}. (freg, Maybe freg) -> [AArch64 AReg freg ()]
go([(freg, Maybe freg)] -> [AArch64 AReg freg ()])
-> ([freg] -> [(freg, Maybe freg)])
-> [freg]
-> [AArch64 AReg freg ()]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[(freg, Maybe freg)] -> [(freg, Maybe freg)]
forall a. [a] -> [a]
reverse([(freg, Maybe freg)] -> [(freg, Maybe freg)])
-> ([freg] -> [(freg, Maybe freg)])
-> [freg]
-> [(freg, Maybe freg)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[freg] -> [(freg, Maybe freg)]
forall a. [a] -> [(a, Maybe a)]
s2 where go :: (freg, Maybe freg) -> [AArch64 AReg freg ()]
go (freg
r0, Just freg
r1) = [() -> freg -> freg -> Addr AReg -> AArch64 AReg freg ()
forall reg freg a.
a -> freg -> freg -> Addr reg -> AArch64 reg freg a
LdpD () freg
r0 freg
r1 (AReg -> Addr AReg
forall reg. reg -> Addr reg
R AReg
SP), () -> AReg -> AReg -> Word16 -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
AddRC () AReg
SP AReg
SP Word16
16]; go (freg
r, Maybe freg
Nothing) = [() -> freg -> Addr AReg -> AArch64 AReg freg ()
forall reg freg a. a -> freg -> Addr reg -> AArch64 reg freg a
LdrD () freg
r (AReg -> Addr AReg
forall reg. reg -> Addr reg
R AReg
SP), () -> AReg -> AReg -> Word16 -> AArch64 AReg freg ()
forall reg freg a. a -> reg -> reg -> Word16 -> AArch64 reg freg a
AddRC () AReg
SP AReg
SP Word16
16]
hexd :: Integral a => a -> Doc ann
hexd :: forall a ann. Integral a => a -> Doc ann
hexd = [Char] -> Doc ann
forall ann. [Char] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty([Char] -> Doc ann) -> (a -> [Char]) -> a -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(([Char] -> [Char]) -> [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$[Char]
"")(([Char] -> [Char]) -> [Char])
-> (a -> [Char] -> [Char]) -> a -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(([Char]
"#0x"[Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++)([Char] -> [Char]) -> ([Char] -> [Char]) -> [Char] -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.)(([Char] -> [Char]) -> [Char] -> [Char])
-> (a -> [Char] -> [Char]) -> a -> [Char] -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.a -> [Char] -> [Char]
forall a. Integral a => a -> [Char] -> [Char]
showHex
instance (Pretty reg, Pretty freg) => Pretty (AArch64 reg freg a) where
pretty :: forall ann. AArch64 reg freg a -> Doc ann
pretty (Label a
_ Label
l) = Label -> Doc ann
forall ann. Label -> Doc ann
prettyLabel Label
l Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
":"
pretty (B a
_ Label
l) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"b" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Label -> Doc ann
forall ann. Label -> Doc ann
prettyLabel Label
l)
pretty (Blr a
_ reg
r) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"blr" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r)
pretty (Bl a
_ CFunc
l) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"bl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> CFunc -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pSym CFunc
l)
pretty (C a
_ Label
l) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"call" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Label -> Doc ann
forall ann. Label -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Label
l)
pretty (Bc a
_ Cond
c Label
l) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"b." Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Cond -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Cond -> Doc ann
pretty Cond
c Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Label -> Doc ann
forall ann. Label -> Doc ann
prettyLabel Label
l)
pretty (FMovXX a
_ freg
xr0 freg
xr1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fmov" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
xr0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
xr1)
pretty (FMovDR a
_ freg
d reg
r) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fmov" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r)
pretty (MovRR a
_ reg
r0 reg
r1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"mov" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1)
pretty (MovRC a
_ reg
r Word16
u) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"mov" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word16 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word16
u)
pretty (Ldr a
_ reg
r Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"ldr" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (LdrB a
_ reg
r Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"ldrb" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (Str a
_ reg
r Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"str" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (StrB a
_ reg
r Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"strb" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (LdrD a
_ freg
xr Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"ldr" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
xr Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (StrD a
_ freg
xr Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"str" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
xr Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (AddRR a
_ reg
rD reg
rS reg
rS') = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"add" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS')
pretty (AddRRS a
_ reg
rD reg
rS reg
rS' Word8
s) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"add" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS' Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"LSL" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"#" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Word8 -> Doc ann
forall ann. Word8 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Word8
s)
pretty (SubRR a
_ reg
rD reg
rS reg
rS') = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"sub" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS')
pretty (AndRR a
_ reg
rD reg
rS reg
rS') = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"and" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS')
pretty (OrRR a
_ reg
rD reg
rS reg
rS') = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"orr" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS')
pretty (Eor a
_ reg
rD reg
rS reg
rS') = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"eor" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS')
pretty (EorI a
_ reg
rD reg
rS BM
i) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"eor" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> BM -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. BM -> Doc ann
pretty BM
i)
pretty (ZeroR a
_ reg
rD) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"eor" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD)
pretty (Mvn a
_ reg
rD reg
rS) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"mvn" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS)
pretty (MulRR a
_ reg
rD reg
rS reg
rS') = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"mul" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS')
pretty (SubRC a
_ reg
rD reg
rS Word16
u) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"sub" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word16 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word16
u)
pretty (AddRC a
_ reg
rD reg
rS Word16
u) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"add" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word16 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word16
u)
pretty (Lsl a
_ reg
rD reg
rS Word8
u) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"lsl" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word8 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word8
u)
pretty (Asr a
_ reg
rD reg
rS Word8
u) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"asr" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word8 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word8
u)
pretty (CmpRC a
_ reg
r Word16
u) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cmp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word16 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word16
u)
pretty (CmpRR a
_ reg
r0 reg
r1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cmp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1)
pretty (Neg a
_ reg
rD reg
rS) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"neg" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS)
pretty (Fmul a
_ freg
rD freg
r0 freg
r1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fmul" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r1)
pretty (Fadd a
_ freg
rD freg
r0 freg
r1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fadd" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r1)
pretty (Fsub a
_ freg
rD freg
r0 freg
r1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fsub" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r1)
pretty (Fdiv a
_ freg
rD freg
r0 freg
r1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fdiv" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r1)
pretty (FcmpZ a
_ freg
xr) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fcmp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
xr Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"#0.0")
pretty (Fneg a
_ freg
d0 freg
d1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fneg" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1)
pretty Ret{} = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"ret"
pretty RetL{} = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"ret"
pretty (Scvtf a
_ freg
d reg
r) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"scvtf" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r)
pretty (Fcvtms a
_ reg
r freg
d) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fcvtms" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d)
pretty (Fcvtas a
_ reg
r freg
d) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fcvtas" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d)
pretty (MovK a
_ reg
r Word16
i Int
s) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"movk" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word16 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word16
i Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"LSL" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"#" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int
s)
pretty (MovZ a
_ reg
r Word16
i Int
s) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"movz" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Word16 -> Doc ann
forall a ann. Integral a => a -> Doc ann
hexd Word16
i Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"LSL" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"#" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int
s)
pretty (Fcmp a
_ freg
d0 freg
d1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fcmp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1)
pretty (Stp a
_ reg
r0 reg
r1 Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"stp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (Ldp a
_ reg
r0 reg
r1 Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"ldp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (StpD a
_ freg
d0 freg
d1 Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"stp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (LdpD a
_ freg
d0 freg
d1 Addr reg
a) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"ldp" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
pretty (Fmadd a
_ freg
d0 freg
d1 freg
d2 freg
d3) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fmadd" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d2 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d3)
pretty (Fmsub a
_ freg
d0 freg
d1 freg
d2 freg
d3) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fmsub" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d2 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d3)
pretty (Madd a
_ reg
r0 reg
r1 reg
r2 reg
r3) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"madd" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r2 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r3)
pretty (Msub a
_ reg
r0 reg
r1 reg
r2 reg
r3) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"msub" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r2 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r3)
pretty (Sdiv a
_ reg
rD reg
rS reg
rS') = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"sdiv" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rD Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
rS')
pretty (Fsqrt a
_ freg
d0 freg
d1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fsqrt" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1)
pretty (Frintm a
_ freg
d0 freg
d1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"frintm" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1)
pretty (MrsR a
_ reg
r) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"mrs" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"rndr")
pretty (MovRCf a
_ reg
r CFunc
cf) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"mov" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> CFunc -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. CFunc -> Doc ann
pretty CFunc
cf)
pretty (LdrRL a
_ reg
r Int
l) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"ldr" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"=arr_" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Int -> Doc ann
forall ann. Int -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int
l)
pretty (Fmax a
_ freg
d0 freg
d1 freg
d2) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fmax" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d2)
pretty (Fmin a
_ freg
d0 freg
d1 freg
d2) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fmin" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d2)
pretty (Fabs a
_ freg
d0 freg
d1) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fabs" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1)
pretty (Csel a
_ reg
r0 reg
r1 reg
r2 Cond
p) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"csel" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r2 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Cond -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Cond -> Doc ann
pretty Cond
p)
pretty (Tbnz a
_ reg
r Word8
n Label
l) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"tbnz" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"#" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Word8 -> Doc ann
forall ann. Word8 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Word8
n Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Label -> Doc ann
forall ann. Label -> Doc ann
prettyLabel Label
l)
pretty (Tbz a
_ reg
r Word8
n Label
l) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"tbz" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"#" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Word8 -> Doc ann
forall ann. Word8 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Word8
n Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Label -> Doc ann
forall ann. Label -> Doc ann
prettyLabel Label
l)
pretty (Cbnz a
_ reg
r Label
l) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cbnz" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Label -> Doc ann
forall ann. Label -> Doc ann
prettyLabel Label
l)
pretty (Fcsel a
_ freg
d0 freg
d1 freg
d2 Cond
p) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fcsel" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d0 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d1 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
d2 Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Cond -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Cond -> Doc ann
pretty Cond
p)
pretty (TstI a
_ reg
r BM
i) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"tst" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> BM -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. BM -> Doc ann
pretty BM
i)
pretty (Cset a
_ reg
r Cond
c) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cset" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"," Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Cond -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Cond -> Doc ann
pretty Cond
c)
instance (Pretty reg, Pretty freg) => Show (AArch64 reg freg a) where show :: AArch64 reg freg a -> [Char]
show=Doc Any -> [Char]
forall a. Show a => a -> [Char]
show(Doc Any -> [Char])
-> (AArch64 reg freg a -> Doc Any) -> AArch64 reg freg a -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.AArch64 reg freg a -> Doc Any
forall a ann. Pretty a => a -> Doc ann
forall ann. AArch64 reg freg a -> Doc ann
pretty
prettyLive :: (Pretty reg, Pretty freg, Pretty o) => AArch64 reg freg o -> Doc ann
prettyLive :: forall reg freg o ann.
(Pretty reg, Pretty freg, Pretty o) =>
AArch64 reg freg o -> Doc ann
prettyLive AArch64 reg freg o
r = AArch64 reg freg o -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. AArch64 reg freg o -> Doc ann
pretty AArch64 reg freg o
r Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> o -> Doc ann
forall ann. o -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (AArch64 reg freg o -> o
forall reg freg a. AArch64 reg freg a -> a
ann AArch64 reg freg o
r)
prettyDebug :: (Pretty freg, Pretty reg, Pretty o) => [AArch64 reg freg o] -> Doc ann
prettyDebug :: forall freg reg o ann.
(Pretty freg, Pretty reg, Pretty o) =>
[AArch64 reg freg o] -> Doc ann
prettyDebug = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
prettyLines ([Doc ann] -> Doc ann)
-> ([AArch64 reg freg o] -> [Doc ann])
-> [AArch64 reg freg o]
-> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (AArch64 reg freg o -> Doc ann)
-> [AArch64 reg freg o] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap AArch64 reg freg o -> Doc ann
forall reg freg o ann.
(Pretty reg, Pretty freg, Pretty o) =>
AArch64 reg freg o -> Doc ann
prettyLive