{-# LANGUAGE DeriveFoldable             #-}
{-# LANGUAGE DeriveFunctor              #-}
{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings          #-}

module Asm.X86 ( X86 (..)
               , AbsReg (..), FAbsReg (..), X2Abs (..)
               , X86Reg (..), FX86Reg (..), F2X86 (..)
               , Addr (..)
               , ST (..)
               , Scale (..)
               , Pred (..)
               , RoundMode (..)
               , Label
               , CFunc (..)
               , prettyDebugX86
               , toInt, fToInt, f2ToInt
               , imm8, simd2
               , roundMode
               , mapR, mapFR, mapF2
               , fR
               , hasMa
               ) where

import           Asm.M
import           Control.DeepSeq   (NFData (..))
import           Data.Copointed
import           Data.Int          (Int32, Int64, Int8)
import           Data.Word         (Word8)
import           GHC.Generics      (Generic)
import           Prettyprinter     (Doc, Pretty (..), brackets, colon, (<+>))
import           Prettyprinter.Ext

data X86Reg = Rcx | Rdx | Rsi | Rdi | R8 | R9 | R10 | R11 | R12 | R13 | R14 | R15 | Rbx | Rax | Rbp | Rsp
            deriving (X86Reg -> X86Reg -> Bool
(X86Reg -> X86Reg -> Bool)
-> (X86Reg -> X86Reg -> Bool) -> Eq X86Reg
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: X86Reg -> X86Reg -> Bool
== :: X86Reg -> X86Reg -> Bool
$c/= :: X86Reg -> X86Reg -> Bool
/= :: X86Reg -> X86Reg -> Bool
Eq, Eq X86Reg
Eq X86Reg =>
(X86Reg -> X86Reg -> Ordering)
-> (X86Reg -> X86Reg -> Bool)
-> (X86Reg -> X86Reg -> Bool)
-> (X86Reg -> X86Reg -> Bool)
-> (X86Reg -> X86Reg -> Bool)
-> (X86Reg -> X86Reg -> X86Reg)
-> (X86Reg -> X86Reg -> X86Reg)
-> Ord X86Reg
X86Reg -> X86Reg -> Bool
X86Reg -> X86Reg -> Ordering
X86Reg -> X86Reg -> X86Reg
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 :: X86Reg -> X86Reg -> Ordering
compare :: X86Reg -> X86Reg -> Ordering
$c< :: X86Reg -> X86Reg -> Bool
< :: X86Reg -> X86Reg -> Bool
$c<= :: X86Reg -> X86Reg -> Bool
<= :: X86Reg -> X86Reg -> Bool
$c> :: X86Reg -> X86Reg -> Bool
> :: X86Reg -> X86Reg -> Bool
$c>= :: X86Reg -> X86Reg -> Bool
>= :: X86Reg -> X86Reg -> Bool
$cmax :: X86Reg -> X86Reg -> X86Reg
max :: X86Reg -> X86Reg -> X86Reg
$cmin :: X86Reg -> X86Reg -> X86Reg
min :: X86Reg -> X86Reg -> X86Reg
Ord, Int -> X86Reg
X86Reg -> Int
X86Reg -> [X86Reg]
X86Reg -> X86Reg
X86Reg -> X86Reg -> [X86Reg]
X86Reg -> X86Reg -> X86Reg -> [X86Reg]
(X86Reg -> X86Reg)
-> (X86Reg -> X86Reg)
-> (Int -> X86Reg)
-> (X86Reg -> Int)
-> (X86Reg -> [X86Reg])
-> (X86Reg -> X86Reg -> [X86Reg])
-> (X86Reg -> X86Reg -> [X86Reg])
-> (X86Reg -> X86Reg -> X86Reg -> [X86Reg])
-> Enum X86Reg
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 :: X86Reg -> X86Reg
succ :: X86Reg -> X86Reg
$cpred :: X86Reg -> X86Reg
pred :: X86Reg -> X86Reg
$ctoEnum :: Int -> X86Reg
toEnum :: Int -> X86Reg
$cfromEnum :: X86Reg -> Int
fromEnum :: X86Reg -> Int
$cenumFrom :: X86Reg -> [X86Reg]
enumFrom :: X86Reg -> [X86Reg]
$cenumFromThen :: X86Reg -> X86Reg -> [X86Reg]
enumFromThen :: X86Reg -> X86Reg -> [X86Reg]
$cenumFromTo :: X86Reg -> X86Reg -> [X86Reg]
enumFromTo :: X86Reg -> X86Reg -> [X86Reg]
$cenumFromThenTo :: X86Reg -> X86Reg -> X86Reg -> [X86Reg]
enumFromThenTo :: X86Reg -> X86Reg -> X86Reg -> [X86Reg]
Enum, (forall x. X86Reg -> Rep X86Reg x)
-> (forall x. Rep X86Reg x -> X86Reg) -> Generic X86Reg
forall x. Rep X86Reg x -> X86Reg
forall x. X86Reg -> Rep X86Reg x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. X86Reg -> Rep X86Reg x
from :: forall x. X86Reg -> Rep X86Reg x
$cto :: forall x. Rep X86Reg x -> X86Reg
to :: forall x. Rep X86Reg x -> X86Reg
Generic)

data FX86Reg = XMM1 | XMM2 | XMM3 | XMM4 | XMM5 | XMM6 | XMM7 | XMM8 | XMM9 | XMM10 | XMM11 | XMM12 | XMM13 | XMM14 | XMM15 | XMM0
             deriving (FX86Reg -> FX86Reg -> Bool
(FX86Reg -> FX86Reg -> Bool)
-> (FX86Reg -> FX86Reg -> Bool) -> Eq FX86Reg
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FX86Reg -> FX86Reg -> Bool
== :: FX86Reg -> FX86Reg -> Bool
$c/= :: FX86Reg -> FX86Reg -> Bool
/= :: FX86Reg -> FX86Reg -> Bool
Eq, Eq FX86Reg
Eq FX86Reg =>
(FX86Reg -> FX86Reg -> Ordering)
-> (FX86Reg -> FX86Reg -> Bool)
-> (FX86Reg -> FX86Reg -> Bool)
-> (FX86Reg -> FX86Reg -> Bool)
-> (FX86Reg -> FX86Reg -> Bool)
-> (FX86Reg -> FX86Reg -> FX86Reg)
-> (FX86Reg -> FX86Reg -> FX86Reg)
-> Ord FX86Reg
FX86Reg -> FX86Reg -> Bool
FX86Reg -> FX86Reg -> Ordering
FX86Reg -> FX86Reg -> FX86Reg
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 :: FX86Reg -> FX86Reg -> Ordering
compare :: FX86Reg -> FX86Reg -> Ordering
$c< :: FX86Reg -> FX86Reg -> Bool
< :: FX86Reg -> FX86Reg -> Bool
$c<= :: FX86Reg -> FX86Reg -> Bool
<= :: FX86Reg -> FX86Reg -> Bool
$c> :: FX86Reg -> FX86Reg -> Bool
> :: FX86Reg -> FX86Reg -> Bool
$c>= :: FX86Reg -> FX86Reg -> Bool
>= :: FX86Reg -> FX86Reg -> Bool
$cmax :: FX86Reg -> FX86Reg -> FX86Reg
max :: FX86Reg -> FX86Reg -> FX86Reg
$cmin :: FX86Reg -> FX86Reg -> FX86Reg
min :: FX86Reg -> FX86Reg -> FX86Reg
Ord, Int -> FX86Reg
FX86Reg -> Int
FX86Reg -> [FX86Reg]
FX86Reg -> FX86Reg
FX86Reg -> FX86Reg -> [FX86Reg]
FX86Reg -> FX86Reg -> FX86Reg -> [FX86Reg]
(FX86Reg -> FX86Reg)
-> (FX86Reg -> FX86Reg)
-> (Int -> FX86Reg)
-> (FX86Reg -> Int)
-> (FX86Reg -> [FX86Reg])
-> (FX86Reg -> FX86Reg -> [FX86Reg])
-> (FX86Reg -> FX86Reg -> [FX86Reg])
-> (FX86Reg -> FX86Reg -> FX86Reg -> [FX86Reg])
-> Enum FX86Reg
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 :: FX86Reg -> FX86Reg
succ :: FX86Reg -> FX86Reg
$cpred :: FX86Reg -> FX86Reg
pred :: FX86Reg -> FX86Reg
$ctoEnum :: Int -> FX86Reg
toEnum :: Int -> FX86Reg
$cfromEnum :: FX86Reg -> Int
fromEnum :: FX86Reg -> Int
$cenumFrom :: FX86Reg -> [FX86Reg]
enumFrom :: FX86Reg -> [FX86Reg]
$cenumFromThen :: FX86Reg -> FX86Reg -> [FX86Reg]
enumFromThen :: FX86Reg -> FX86Reg -> [FX86Reg]
$cenumFromTo :: FX86Reg -> FX86Reg -> [FX86Reg]
enumFromTo :: FX86Reg -> FX86Reg -> [FX86Reg]
$cenumFromThenTo :: FX86Reg -> FX86Reg -> FX86Reg -> [FX86Reg]
enumFromThenTo :: FX86Reg -> FX86Reg -> FX86Reg -> [FX86Reg]
Enum, (forall x. FX86Reg -> Rep FX86Reg x)
-> (forall x. Rep FX86Reg x -> FX86Reg) -> Generic FX86Reg
forall x. Rep FX86Reg x -> FX86Reg
forall x. FX86Reg -> Rep FX86Reg x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. FX86Reg -> Rep FX86Reg x
from :: forall x. FX86Reg -> Rep FX86Reg x
$cto :: forall x. Rep FX86Reg x -> FX86Reg
to :: forall x. Rep FX86Reg x -> FX86Reg
Generic)

data F2X86 = YMM1 | YMM2 | YMM3 | YMM4 | YMM5 | YMM6 | YMM7 | YMM8 | YMM9 | YMM10 | YMM11 | YMM12 | YMM13 | YMM14 | YMM15 | YMM0
           deriving (F2X86 -> F2X86 -> Bool
(F2X86 -> F2X86 -> Bool) -> (F2X86 -> F2X86 -> Bool) -> Eq F2X86
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: F2X86 -> F2X86 -> Bool
== :: F2X86 -> F2X86 -> Bool
$c/= :: F2X86 -> F2X86 -> Bool
/= :: F2X86 -> F2X86 -> Bool
Eq, Eq F2X86
Eq F2X86 =>
(F2X86 -> F2X86 -> Ordering)
-> (F2X86 -> F2X86 -> Bool)
-> (F2X86 -> F2X86 -> Bool)
-> (F2X86 -> F2X86 -> Bool)
-> (F2X86 -> F2X86 -> Bool)
-> (F2X86 -> F2X86 -> F2X86)
-> (F2X86 -> F2X86 -> F2X86)
-> Ord F2X86
F2X86 -> F2X86 -> Bool
F2X86 -> F2X86 -> Ordering
F2X86 -> F2X86 -> F2X86
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 :: F2X86 -> F2X86 -> Ordering
compare :: F2X86 -> F2X86 -> Ordering
$c< :: F2X86 -> F2X86 -> Bool
< :: F2X86 -> F2X86 -> Bool
$c<= :: F2X86 -> F2X86 -> Bool
<= :: F2X86 -> F2X86 -> Bool
$c> :: F2X86 -> F2X86 -> Bool
> :: F2X86 -> F2X86 -> Bool
$c>= :: F2X86 -> F2X86 -> Bool
>= :: F2X86 -> F2X86 -> Bool
$cmax :: F2X86 -> F2X86 -> F2X86
max :: F2X86 -> F2X86 -> F2X86
$cmin :: F2X86 -> F2X86 -> F2X86
min :: F2X86 -> F2X86 -> F2X86
Ord, Int -> F2X86
F2X86 -> Int
F2X86 -> [F2X86]
F2X86 -> F2X86
F2X86 -> F2X86 -> [F2X86]
F2X86 -> F2X86 -> F2X86 -> [F2X86]
(F2X86 -> F2X86)
-> (F2X86 -> F2X86)
-> (Int -> F2X86)
-> (F2X86 -> Int)
-> (F2X86 -> [F2X86])
-> (F2X86 -> F2X86 -> [F2X86])
-> (F2X86 -> F2X86 -> [F2X86])
-> (F2X86 -> F2X86 -> F2X86 -> [F2X86])
-> Enum F2X86
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 :: F2X86 -> F2X86
succ :: F2X86 -> F2X86
$cpred :: F2X86 -> F2X86
pred :: F2X86 -> F2X86
$ctoEnum :: Int -> F2X86
toEnum :: Int -> F2X86
$cfromEnum :: F2X86 -> Int
fromEnum :: F2X86 -> Int
$cenumFrom :: F2X86 -> [F2X86]
enumFrom :: F2X86 -> [F2X86]
$cenumFromThen :: F2X86 -> F2X86 -> [F2X86]
enumFromThen :: F2X86 -> F2X86 -> [F2X86]
$cenumFromTo :: F2X86 -> F2X86 -> [F2X86]
enumFromTo :: F2X86 -> F2X86 -> [F2X86]
$cenumFromThenTo :: F2X86 -> F2X86 -> F2X86 -> [F2X86]
enumFromThenTo :: F2X86 -> F2X86 -> F2X86 -> [F2X86]
Enum, (forall x. F2X86 -> Rep F2X86 x)
-> (forall x. Rep F2X86 x -> F2X86) -> Generic F2X86
forall x. Rep F2X86 x -> F2X86
forall x. F2X86 -> Rep F2X86 x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. F2X86 -> Rep F2X86 x
from :: forall x. F2X86 -> Rep F2X86 x
$cto :: forall x. Rep F2X86 x -> F2X86
to :: forall x. Rep F2X86 x -> F2X86
Generic)

instance NFData X86Reg where
instance NFData FX86Reg where
instance NFData F2X86 where

simd2 :: FX86Reg -> F2X86
simd2 :: FX86Reg -> F2X86
simd2 = Int -> F2X86
forall a. Enum a => Int -> a
toEnum(Int -> F2X86) -> (FX86Reg -> Int) -> FX86Reg -> F2X86
forall b c a. (b -> c) -> (a -> b) -> a -> c
.FX86Reg -> Int
forall a. Enum a => a -> Int
fromEnum

instance Pretty X86Reg where
    pretty :: forall ann. X86Reg -> Doc ann
pretty X86Reg
Rax = Doc ann
"rax"
    pretty X86Reg
Rbx = Doc ann
"rbx"
    pretty X86Reg
Rcx = Doc ann
"rcx"
    pretty X86Reg
Rdx = Doc ann
"rdx"
    pretty X86Reg
Rsi = Doc ann
"rsi"
    pretty X86Reg
Rdi = Doc ann
"rdi"
    pretty X86Reg
R8  = Doc ann
"r8"
    pretty X86Reg
R9  = Doc ann
"r9"
    pretty X86Reg
R10 = Doc ann
"r10"
    pretty X86Reg
R11 = Doc ann
"r11"
    pretty X86Reg
R12 = Doc ann
"r12"
    pretty X86Reg
R13 = Doc ann
"r13"
    pretty X86Reg
R14 = Doc ann
"r14"
    pretty X86Reg
R15 = Doc ann
"r15"
    pretty X86Reg
Rsp = Doc ann
"rsp"
    pretty X86Reg
Rbp = Doc ann
"rbp"

instance Pretty FX86Reg where
    pretty :: forall ann. FX86Reg -> Doc ann
pretty FX86Reg
XMM0  = Doc ann
"xmm0"
    pretty FX86Reg
XMM1  = Doc ann
"xmm1"
    pretty FX86Reg
XMM2  = Doc ann
"xmm2"
    pretty FX86Reg
XMM3  = Doc ann
"xmm3"
    pretty FX86Reg
XMM4  = Doc ann
"xmm4"
    pretty FX86Reg
XMM5  = Doc ann
"xmm5"
    pretty FX86Reg
XMM6  = Doc ann
"xmm6"
    pretty FX86Reg
XMM7  = Doc ann
"xmm7"
    pretty FX86Reg
XMM8  = Doc ann
"xmm8"
    pretty FX86Reg
XMM9  = Doc ann
"xmm9"
    pretty FX86Reg
XMM10 = Doc ann
"xmm10"
    pretty FX86Reg
XMM11 = Doc ann
"xmm11"
    pretty FX86Reg
XMM12 = Doc ann
"xmm12"
    pretty FX86Reg
XMM13 = Doc ann
"xmm13"
    pretty FX86Reg
XMM14 = Doc ann
"xmm14"
    pretty FX86Reg
XMM15 = Doc ann
"xmm15"

instance Pretty F2X86 where
    pretty :: forall ann. F2X86 -> Doc ann
pretty F2X86
YMM0  = Doc ann
"ymm0"
    pretty F2X86
YMM1  = Doc ann
"ymm1"
    pretty F2X86
YMM2  = Doc ann
"ymm2"
    pretty F2X86
YMM3  = Doc ann
"ymm3"
    pretty F2X86
YMM4  = Doc ann
"ymm4"
    pretty F2X86
YMM5  = Doc ann
"ymm5"
    pretty F2X86
YMM6  = Doc ann
"ymm6"
    pretty F2X86
YMM7  = Doc ann
"ymm7"
    pretty F2X86
YMM8  = Doc ann
"ymm8"
    pretty F2X86
YMM9  = Doc ann
"ymm9"
    pretty F2X86
YMM10 = Doc ann
"ymm10"
    pretty F2X86
YMM11 = Doc ann
"ymm11"
    pretty F2X86
YMM12 = Doc ann
"ymm12"
    pretty F2X86
YMM13 = Doc ann
"ymm13"
    pretty F2X86
YMM14 = Doc ann
"ymm14"
    pretty F2X86
YMM15 = Doc ann
"ymm15"

instance Show X86Reg where show :: X86Reg -> [Char]
show = Doc Any -> [Char]
forall a. Show a => a -> [Char]
show (Doc Any -> [Char]) -> (X86Reg -> Doc Any) -> X86Reg -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. X86Reg -> Doc Any
forall a ann. Pretty a => a -> Doc ann
forall ann. X86Reg -> Doc ann
pretty
instance Show FX86Reg where show :: FX86Reg -> [Char]
show = Doc Any -> [Char]
forall a. Show a => a -> [Char]
show (Doc Any -> [Char]) -> (FX86Reg -> Doc Any) -> FX86Reg -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FX86Reg -> Doc Any
forall a ann. Pretty a => a -> Doc ann
forall ann. FX86Reg -> Doc ann
pretty
instance Show F2X86 where show :: F2X86 -> [Char]
show = Doc Any -> [Char]
forall a. Show a => a -> [Char]
show (Doc Any -> [Char]) -> (F2X86 -> Doc Any) -> F2X86 -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. F2X86 -> Doc Any
forall a ann. Pretty a => a -> Doc ann
forall ann. F2X86 -> Doc ann
pretty

data AbsReg = IReg !Int
            | CArg0 | CArg1 | CArg2 | CArg3 | CArg4 | CArg5
            | CRet
            | SP | BP
            | Quot | Rem
            deriving (AbsReg -> AbsReg -> Bool
(AbsReg -> AbsReg -> Bool)
-> (AbsReg -> AbsReg -> Bool) -> Eq AbsReg
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AbsReg -> AbsReg -> Bool
== :: AbsReg -> AbsReg -> Bool
$c/= :: AbsReg -> AbsReg -> Bool
/= :: AbsReg -> AbsReg -> Bool
Eq, Eq AbsReg
Eq AbsReg =>
(AbsReg -> AbsReg -> Ordering)
-> (AbsReg -> AbsReg -> Bool)
-> (AbsReg -> AbsReg -> Bool)
-> (AbsReg -> AbsReg -> Bool)
-> (AbsReg -> AbsReg -> Bool)
-> (AbsReg -> AbsReg -> AbsReg)
-> (AbsReg -> AbsReg -> AbsReg)
-> Ord AbsReg
AbsReg -> AbsReg -> Bool
AbsReg -> AbsReg -> Ordering
AbsReg -> AbsReg -> AbsReg
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 :: AbsReg -> AbsReg -> Ordering
compare :: AbsReg -> AbsReg -> Ordering
$c< :: AbsReg -> AbsReg -> Bool
< :: AbsReg -> AbsReg -> Bool
$c<= :: AbsReg -> AbsReg -> Bool
<= :: AbsReg -> AbsReg -> Bool
$c> :: AbsReg -> AbsReg -> Bool
> :: AbsReg -> AbsReg -> Bool
$c>= :: AbsReg -> AbsReg -> Bool
>= :: AbsReg -> AbsReg -> Bool
$cmax :: AbsReg -> AbsReg -> AbsReg
max :: AbsReg -> AbsReg -> AbsReg
$cmin :: AbsReg -> AbsReg -> AbsReg
min :: AbsReg -> AbsReg -> AbsReg
Ord)

data FAbsReg = FReg !Int
             | FArg0 | FArg1 | FArg2 | FArg3 | FArg4 | FArg5 | FArg6 | FArg7
             | FRet0 | FRet1
             deriving (FAbsReg -> FAbsReg -> Bool
(FAbsReg -> FAbsReg -> Bool)
-> (FAbsReg -> FAbsReg -> Bool) -> Eq FAbsReg
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FAbsReg -> FAbsReg -> Bool
== :: FAbsReg -> FAbsReg -> Bool
$c/= :: FAbsReg -> FAbsReg -> Bool
/= :: FAbsReg -> FAbsReg -> Bool
Eq, Eq FAbsReg
Eq FAbsReg =>
(FAbsReg -> FAbsReg -> Ordering)
-> (FAbsReg -> FAbsReg -> Bool)
-> (FAbsReg -> FAbsReg -> Bool)
-> (FAbsReg -> FAbsReg -> Bool)
-> (FAbsReg -> FAbsReg -> Bool)
-> (FAbsReg -> FAbsReg -> FAbsReg)
-> (FAbsReg -> FAbsReg -> FAbsReg)
-> Ord FAbsReg
FAbsReg -> FAbsReg -> Bool
FAbsReg -> FAbsReg -> Ordering
FAbsReg -> FAbsReg -> FAbsReg
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 :: FAbsReg -> FAbsReg -> Ordering
compare :: FAbsReg -> FAbsReg -> Ordering
$c< :: FAbsReg -> FAbsReg -> Bool
< :: FAbsReg -> FAbsReg -> Bool
$c<= :: FAbsReg -> FAbsReg -> Bool
<= :: FAbsReg -> FAbsReg -> Bool
$c> :: FAbsReg -> FAbsReg -> Bool
> :: FAbsReg -> FAbsReg -> Bool
$c>= :: FAbsReg -> FAbsReg -> Bool
>= :: FAbsReg -> FAbsReg -> Bool
$cmax :: FAbsReg -> FAbsReg -> FAbsReg
max :: FAbsReg -> FAbsReg -> FAbsReg
$cmin :: FAbsReg -> FAbsReg -> FAbsReg
min :: FAbsReg -> FAbsReg -> FAbsReg
Ord)

data X2Abs = F2Reg !Int deriving (X2Abs -> X2Abs -> Bool
(X2Abs -> X2Abs -> Bool) -> (X2Abs -> X2Abs -> Bool) -> Eq X2Abs
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: X2Abs -> X2Abs -> Bool
== :: X2Abs -> X2Abs -> Bool
$c/= :: X2Abs -> X2Abs -> Bool
/= :: X2Abs -> X2Abs -> Bool
Eq, Eq X2Abs
Eq X2Abs =>
(X2Abs -> X2Abs -> Ordering)
-> (X2Abs -> X2Abs -> Bool)
-> (X2Abs -> X2Abs -> Bool)
-> (X2Abs -> X2Abs -> Bool)
-> (X2Abs -> X2Abs -> Bool)
-> (X2Abs -> X2Abs -> X2Abs)
-> (X2Abs -> X2Abs -> X2Abs)
-> Ord X2Abs
X2Abs -> X2Abs -> Bool
X2Abs -> X2Abs -> Ordering
X2Abs -> X2Abs -> X2Abs
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 :: X2Abs -> X2Abs -> Ordering
compare :: X2Abs -> X2Abs -> Ordering
$c< :: X2Abs -> X2Abs -> Bool
< :: X2Abs -> X2Abs -> Bool
$c<= :: X2Abs -> X2Abs -> Bool
<= :: X2Abs -> X2Abs -> Bool
$c> :: X2Abs -> X2Abs -> Bool
> :: X2Abs -> X2Abs -> Bool
$c>= :: X2Abs -> X2Abs -> Bool
>= :: X2Abs -> X2Abs -> Bool
$cmax :: X2Abs -> X2Abs -> X2Abs
max :: X2Abs -> X2Abs -> X2Abs
$cmin :: X2Abs -> X2Abs -> X2Abs
min :: X2Abs -> X2Abs -> X2Abs
Ord)

instance Pretty AbsReg where
    pretty :: forall ann. AbsReg -> Doc ann
pretty AbsReg
CArg0    = Doc ann
"rdi"
    pretty AbsReg
CArg1    = Doc ann
"rsi"
    pretty AbsReg
CArg2    = Doc ann
"rdx"
    pretty AbsReg
CArg3    = Doc ann
"rcx"
    pretty AbsReg
CArg4    = Doc ann
"r8"
    pretty AbsReg
CArg5    = Doc ann
"r9"
    pretty AbsReg
CRet     = Doc ann
"rax"
    pretty AbsReg
SP       = Doc ann
"rsp"
    pretty AbsReg
Quot     = Doc ann
"rax"
    pretty AbsReg
Rem      = Doc ann
"rdx"
    pretty (IReg Int
i) = Doc ann
"^r" 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
BP       = Doc ann
"rbp"

instance Pretty FAbsReg where
    pretty :: forall ann. FAbsReg -> Doc ann
pretty FAbsReg
FArg0    = Doc ann
"xmm0"
    pretty FAbsReg
FArg1    = Doc ann
"xmm1"
    pretty FAbsReg
FArg2    = Doc ann
"xmm2"
    pretty FAbsReg
FArg3    = Doc ann
"xmm3"
    pretty FAbsReg
FArg4    = Doc ann
"xmm4"
    pretty FAbsReg
FArg5    = Doc ann
"xmm5"
    pretty FAbsReg
FArg6    = Doc ann
"xmm6"
    pretty FAbsReg
FArg7    = Doc ann
"xmm7"
    pretty FAbsReg
FRet0    = Doc ann
"xmm0"
    pretty FAbsReg
FRet1    = Doc ann
"xmm1"
    pretty (FReg Int
i) = Doc ann
"^xmm" 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

instance Pretty X2Abs where
    pretty :: forall ann. X2Abs -> Doc ann
pretty (F2Reg Int
i) = Doc ann
"ymm" 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

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
CRet     = Int
6
toInt AbsReg
SP       = Int
7
toInt AbsReg
Quot     = Int
6 -- FIXME: I think this is wrong, graph approach would precolor both...?
toInt AbsReg
Rem      = Int
2
toInt (IReg Int
i) = Int
16Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
i
toInt AbsReg
BP       = -Int
16

fToInt :: FAbsReg -> Int
fToInt :: FAbsReg -> Int
fToInt FAbsReg
FArg0    = Int
8
fToInt FAbsReg
FArg1    = Int
9
fToInt FAbsReg
FArg2    = Int
10
fToInt FAbsReg
FArg3    = Int
11
fToInt FAbsReg
FArg4    = Int
12
fToInt FAbsReg
FArg5    = Int
13
fToInt FAbsReg
FArg6    = Int
14
fToInt FAbsReg
FArg7    = Int
15
fToInt FAbsReg
FRet0    = Int
8 -- xmm0
fToInt FAbsReg
FRet1    = Int
9 -- xmm1
fToInt (FReg Int
i) = Int
16Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
i

f2ToInt :: X2Abs -> Int
f2ToInt :: X2Abs -> Int
f2ToInt (F2Reg Int
i) = Int
16Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
i

newtype ST = ST Int8 deriving (ST -> ()
(ST -> ()) -> NFData ST
forall a. (a -> ()) -> NFData a
$crnf :: ST -> ()
rnf :: ST -> ()
NFData)

instance Pretty ST where
    pretty :: forall ann. ST -> Doc ann
pretty (ST Int8
i) = Doc ann
"st" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Int8 -> Doc ann
forall ann. Int8 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int8
i

data RoundMode = RNearest | RDown | RUp | RZero deriving (forall x. RoundMode -> Rep RoundMode x)
-> (forall x. Rep RoundMode x -> RoundMode) -> Generic RoundMode
forall x. Rep RoundMode x -> RoundMode
forall x. RoundMode -> Rep RoundMode x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. RoundMode -> Rep RoundMode x
from :: forall x. RoundMode -> Rep RoundMode x
$cto :: forall x. Rep RoundMode x -> RoundMode
to :: forall x. Rep RoundMode x -> RoundMode
Generic

instance NFData RoundMode where

-- 3 bits, stored as Word8 for ease of manipulation
roundMode :: RoundMode -> Word8
roundMode :: RoundMode -> Word8
roundMode RoundMode
RNearest = Word8
0x0
roundMode RoundMode
RDown    = Word8
0x1
roundMode RoundMode
RUp      = Word8
0x2
roundMode RoundMode
RZero    = Word8
0x3

instance Pretty RoundMode where
    pretty :: forall ann. RoundMode -> Doc ann
pretty = Word8 -> Doc ann
forall ann. Word8 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (Word8 -> Doc ann) -> (RoundMode -> Word8) -> RoundMode -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RoundMode -> Word8
roundMode

data Scale = One | Two | Four | Eight deriving (Scale -> Scale -> Bool
(Scale -> Scale -> Bool) -> (Scale -> Scale -> Bool) -> Eq Scale
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Scale -> Scale -> Bool
== :: Scale -> Scale -> Bool
$c/= :: Scale -> Scale -> Bool
/= :: Scale -> Scale -> Bool
Eq, (forall x. Scale -> Rep Scale x)
-> (forall x. Rep Scale x -> Scale) -> Generic Scale
forall x. Rep Scale x -> Scale
forall x. Scale -> Rep Scale x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Scale -> Rep Scale x
from :: forall x. Scale -> Rep Scale x
$cto :: forall x. Rep Scale x -> Scale
to :: forall x. Rep Scale x -> Scale
Generic)

instance Pretty Scale where
    pretty :: forall ann. Scale -> Doc ann
pretty Scale
One   = Doc ann
"1"
    pretty Scale
Two   = Doc ann
"2"
    pretty Scale
Four  = Doc ann
"4"
    pretty Scale
Eight = Doc ann
"8"

data Pred = Eqoq | Ltos | Leos | Unordq | Nequq | Nltus | Nleus | Ordq deriving ((forall x. Pred -> Rep Pred x)
-> (forall x. Rep Pred x -> Pred) -> Generic Pred
forall x. Rep Pred x -> Pred
forall x. Pred -> Rep Pred x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Pred -> Rep Pred x
from :: forall x. Pred -> Rep Pred x
$cto :: forall x. Rep Pred x -> Pred
to :: forall x. Rep Pred x -> Pred
Generic)

instance Pretty Pred where
    pretty :: forall ann. Pred -> Doc ann
pretty Pred
Eqoq   = Doc ann
"EQ_OQ"
    pretty Pred
Ltos   = Doc ann
"LT_OS"
    pretty Pred
Leos   = Doc ann
"LE_OS"
    pretty Pred
Unordq = Doc ann
"UNORD_Q"
    pretty Pred
Nequq  = Doc ann
"NEQ_UQ"
    pretty Pred
Nltus  = Doc ann
"NLT_US"
    pretty Pred
Nleus  = Doc ann
"NLE_US"
    pretty Pred
Ordq   = Doc ann
"ORD_Q"

hasMa :: [X86 reg freg f2reg a] -> Bool
hasMa :: forall reg freg f2reg a. [X86 reg freg f2reg a] -> Bool
hasMa = (X86 reg freg f2reg a -> Bool) -> [X86 reg freg f2reg a] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any X86 reg freg f2reg a -> Bool
forall {reg} {freg} {f2} {a}. X86 reg freg f2 a -> Bool
g where g :: X86 reg freg f2 a -> Bool
g Call{} = Bool
True; g X86 reg freg f2 a
_ = Bool
False

-- https://www.felixcloutier.com/x86/cmppd
imm8 :: Pred -> Int8
imm8 :: Pred -> Int8
imm8 Pred
Eqoq   = Int8
0
imm8 Pred
Ltos   = Int8
1
imm8 Pred
Leos   = Int8
2
imm8 Pred
Unordq = Int8
3
imm8 Pred
Nequq  = Int8
4
imm8 Pred
Nltus  = Int8
5
imm8 Pred
Nleus  = Int8
6
imm8 Pred
Ordq   = Int8
7

instance NFData Pred where

data Addr reg = R reg | RC reg Int8 | RC32 reg Int32 | RS reg Scale reg | RSD reg Scale reg Int8 deriving (Addr reg -> Addr reg -> Bool
(Addr reg -> Addr reg -> Bool)
-> (Addr reg -> Addr reg -> Bool) -> Eq (Addr reg)
forall reg. Eq reg => Addr reg -> Addr reg -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall reg. Eq reg => Addr reg -> Addr reg -> Bool
== :: Addr reg -> Addr reg -> Bool
$c/= :: forall reg. Eq reg => Addr reg -> Addr reg -> Bool
/= :: Addr reg -> Addr reg -> Bool
Eq, (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, (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 m. Monoid m => Addr m -> m)
-> (forall m a. Monoid m => (a -> m) -> Addr a -> m)
-> (forall m a. Monoid m => (a -> m) -> Addr a -> m)
-> (forall a b. (a -> b -> b) -> b -> Addr a -> b)
-> (forall a b. (a -> b -> b) -> b -> Addr a -> b)
-> (forall b a. (b -> a -> b) -> b -> Addr a -> b)
-> (forall b a. (b -> a -> b) -> b -> Addr a -> b)
-> (forall a. (a -> a -> a) -> Addr a -> a)
-> (forall a. (a -> a -> a) -> Addr a -> a)
-> (forall a. Addr a -> [a])
-> (forall a. Addr a -> Bool)
-> (forall a. Addr a -> Int)
-> (forall a. Eq a => a -> Addr a -> Bool)
-> (forall a. Ord a => Addr a -> a)
-> (forall a. Ord a => Addr a -> a)
-> (forall a. Num a => Addr a -> a)
-> (forall a. Num a => Addr a -> a)
-> Foldable Addr
forall a. Eq a => a -> Addr a -> Bool
forall a. Num a => Addr a -> a
forall a. Ord a => Addr a -> a
forall m. Monoid m => Addr m -> m
forall a. Addr a -> Bool
forall a. Addr a -> Int
forall a. Addr a -> [a]
forall a. (a -> a -> a) -> Addr a -> a
forall m a. Monoid m => (a -> m) -> Addr a -> m
forall b a. (b -> a -> b) -> b -> Addr a -> b
forall a b. (a -> b -> b) -> b -> Addr a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall m. Monoid m => Addr m -> m
fold :: forall m. Monoid m => Addr m -> m
$cfoldMap :: forall m a. Monoid m => (a -> m) -> Addr a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> Addr a -> m
$cfoldMap' :: forall m a. Monoid m => (a -> m) -> Addr a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> Addr a -> m
$cfoldr :: forall a b. (a -> b -> b) -> b -> Addr a -> b
foldr :: forall a b. (a -> b -> b) -> b -> Addr a -> b
$cfoldr' :: forall a b. (a -> b -> b) -> b -> Addr a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> Addr a -> b
$cfoldl :: forall b a. (b -> a -> b) -> b -> Addr a -> b
foldl :: forall b a. (b -> a -> b) -> b -> Addr a -> b
$cfoldl' :: forall b a. (b -> a -> b) -> b -> Addr a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> Addr a -> b
$cfoldr1 :: forall a. (a -> a -> a) -> Addr a -> a
foldr1 :: forall a. (a -> a -> a) -> Addr a -> a
$cfoldl1 :: forall a. (a -> a -> a) -> Addr a -> a
foldl1 :: forall a. (a -> a -> a) -> Addr a -> a
$ctoList :: forall a. Addr a -> [a]
toList :: forall a. Addr a -> [a]
$cnull :: forall a. Addr a -> Bool
null :: forall a. Addr a -> Bool
$clength :: forall a. Addr a -> Int
length :: forall a. Addr a -> Int
$celem :: forall a. Eq a => a -> Addr a -> Bool
elem :: forall a. Eq a => a -> Addr a -> Bool
$cmaximum :: forall a. Ord a => Addr a -> a
maximum :: forall a. Ord a => Addr a -> a
$cminimum :: forall a. Ord a => Addr a -> a
minimum :: forall a. Ord a => Addr a -> a
$csum :: forall a. Num a => Addr a -> a
sum :: forall a. Num a => Addr a -> a
$cproduct :: forall a. Num a => Addr a -> a
product :: forall a. Num a => Addr a -> a
Foldable)

instance NFData Scale where

instance NFData reg => NFData (Addr reg) where

pix :: a -> Doc ann
pix a
c | a
c a -> a -> Bool
forall a. Ord a => a -> a -> Bool
< a
0 = a -> Doc ann
forall ann. a -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty a
c | Bool
otherwise = Doc ann
"+" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> a -> Doc ann
forall ann. a -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty a
c

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 (RC reg
r Int8
c)        = 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
<> Int8 -> Doc ann
forall {a} {ann}. (Ord a, Num a, Pretty a) => a -> Doc ann
pix Int8
c)
    pretty (RC32 reg
r Int32
c)      = 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
<> Int32 -> Doc ann
forall {a} {ann}. (Ord a, Num a, Pretty a) => a -> Doc ann
pix Int32
c)
    pretty (RS reg
b Scale
One reg
i)    = 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 a. Semigroup a => a -> a -> a
<> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
i)
    pretty (RS reg
b Scale
s reg
i)      = 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 a. Semigroup a => a -> a -> a
<> Scale -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Scale -> Doc ann
pretty Scale
s Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"*" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
i)
    pretty (RSD reg
b Scale
One reg
i Int8
d) = 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
<> 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
<> Int8 -> Doc ann
forall {a} {ann}. (Ord a, Num a, Pretty a) => a -> Doc ann
pix Int8
d)
    pretty (RSD reg
b Scale
s reg
i Int8
d)   = 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 a. Semigroup a => a -> a -> a
<> Scale -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Scale -> Doc ann
pretty Scale
s Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
"*" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> 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
<> Int8 -> Doc ann
forall {a} {ann}. (Ord a, Num a, Pretty a) => a -> Doc ann
pix Int8
d)

data X86 reg freg f2 a = Label { forall reg freg f2 a. X86 reg freg f2 a -> a
ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> Label
label :: Label }
                       | IAddRR { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> reg
rAdd1, forall reg freg f2 a. X86 reg freg f2 a -> reg
rAdd2 :: reg }
                       | IAddRI { ann :: a, rAdd1 :: reg, forall reg freg f2 a. X86 reg freg f2 a -> Int64
rAddI :: Int64 }
                       | ISubRR { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> reg
rSub1, forall reg freg f2 a. X86 reg freg f2 a -> reg
rSub2 :: reg }
                       | ISubRI { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> reg
rSub :: reg, forall reg freg f2 a. X86 reg freg f2 a -> Int64
rSubI :: Int64 }
                       | IMulRR { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> reg
rMul1, forall reg freg f2 a. X86 reg freg f2 a -> reg
rMul2 :: reg }
                       | IMulRA { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> reg
rMul :: reg, forall reg freg f2 a. X86 reg freg f2 a -> Addr reg
aSrc :: Addr reg }
                       | XorRR { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> reg
rXor1, forall reg freg f2 a. X86 reg freg f2 a -> reg
rXor2 :: reg }
                       | MovRR { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> reg
rDest, forall reg freg f2 a. X86 reg freg f2 a -> reg
rSrc :: reg }
                       | MovRA { ann :: a, rDest :: reg, aSrc :: Addr reg }
                       | MovAR { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> Addr reg
aDest :: Addr reg, rSrc :: reg }
                       | MovRL { ann :: a, rDest :: reg, forall reg freg f2 a. X86 reg freg f2 a -> Int
lSrc :: Int }
                       | MovAI32 { ann :: a, aDest :: Addr reg, forall reg freg f2 a. X86 reg freg f2 a -> Int32
i32Src :: Int32 }
                       | MovRI { ann :: a, rDest :: reg, forall reg freg f2 a. X86 reg freg f2 a -> Int64
iSrc :: Int64 }
                       | MovqXR { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> freg
fDest :: freg, rSrc :: reg }
                       | MovqXA { ann :: a, fDest :: freg, aSrc :: Addr reg }
                       | MovqAX { ann :: a, aDest :: Addr reg, forall reg freg f2 a. X86 reg freg f2 a -> freg
fSrc :: freg }
                       | MovqRX { ann :: a, rDest :: reg, fSrc :: freg }
                       | Fld { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> Addr reg
a87 :: Addr reg }
                       | FldS { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> ST
stIsn :: ST }
                       | Fldl2e { ann :: a }
                       | Fldln2 { ann :: a }
                       | Fld1 { ann :: a }
                       | Fyl2x { ann :: a }
                       | Fsin { ann :: a }
                       | Fcos { ann :: a }
                       | Fstp { ann :: a, a87 :: Addr reg }
                       | F2xm1 { ann :: a }
                       | Fmulp { ann :: a }
                       | Fprem { ann :: a }
                       | Faddp { ann :: a }
                       | Fscale { ann :: a }
                       | Fninit { ann :: a }
                       | Fxch { ann :: a, stIsn :: ST }
                       | J { ann :: a, label :: Label }
                       | Je { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> Label
jLabel :: Label }
                       | Jne { ann :: a, jLabel :: Label }
                       | Jg { ann :: a, jLabel :: Label }
                       | Jge { ann :: a, jLabel :: Label }
                       | Jl { ann :: a, jLabel :: Label }
                       | Jle { ann :: a, jLabel :: Label }
                       | C { ann :: a, label :: Label }
                       | CmpRR { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> reg
rCmp, forall reg freg f2 a. X86 reg freg f2 a -> reg
rCmp' :: reg }
                       | CmpRI { ann :: a, rCmp :: reg, forall reg freg f2 a. X86 reg freg f2 a -> Int32
cmpI32 :: Int32 }
                       | Vcmppd { ann :: a, fDest, forall reg freg f2 a. X86 reg freg f2 a -> freg
fCmp, forall reg freg f2 a. X86 reg freg f2 a -> freg
fCmp' :: freg, forall reg freg f2 a. X86 reg freg f2 a -> Pred
cpred :: Pred }
                       | Test { ann :: a, rCmp, rCmp' :: reg }
                       | TestI { ann :: a, rCmp :: reg, cmpI32 :: Int32 }
                       | Ret { ann :: a }                                                 | RetL { ann :: a, label :: Label }
                       | Vdivsd { ann :: a, fDest, forall reg freg f2 a. X86 reg freg f2 a -> freg
fSrc1, forall reg freg f2 a. X86 reg freg f2 a -> freg
fSrc2 :: freg }
                       | Movapd { ann :: a, fDest, fSrc :: freg }
                       | Roundsd { ann :: a, fDest, fSrc :: freg, forall reg freg f2 a. X86 reg freg f2 a -> RoundMode
mode :: RoundMode }
                       | Cvttsd2si { ann :: a, rDest :: reg, fSrc :: freg }
                       | Mulsd { ann :: a, fDest, fSrc :: freg }
                       | Addsd { ann :: a, fDest, fSrc :: freg }
                       | Subsd { ann :: a, fDest, fSrc :: freg }
                       | Divsd { ann :: a, fDest, fSrc :: freg }
                       | Vmulsd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | Vaddsd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | Vsubsd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | VaddsdA { ann :: a, fDest, fSrc :: freg, aSrc :: Addr reg }
                       | Cvtsi2sd { ann :: a, fDest :: freg, rSrc :: reg }
                       | Vfmadd231sd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | Vfmadd213sd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | Vfmsub231sd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | Vfmsub213sd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | Vfmsub132sd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | Vfmnadd231sd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | Vfmadd231sdA { ann :: a, fDest, fSrc :: freg, aSrc :: Addr reg }
                       | Push { ann :: a, rSrc :: reg }
                       | Pop { ann :: a, rDest :: reg }
                       | Call { ann :: a, forall reg freg f2 a. X86 reg freg f2 a -> CFunc
cfunc :: CFunc }
                       | IDiv { ann :: a, rSrc :: reg }
                       | Sal { ann :: a, rSrc :: reg, forall reg freg f2 a. X86 reg freg f2 a -> Int8
iExp :: Int8 }
                       | Sar { ann :: a, rSrc :: reg, iExp :: Int8 }
                       | Sqrtsd { ann :: a, fDest, fSrc :: freg }
                       | Maxsd { ann :: a, fDest, fSrc :: freg }
                       | Vmaxsd { ann :: a, fDest, fSrc1, fSrc2 :: freg }
                       | VmaxsdA { ann :: a, fDest, fSrc :: freg, aSrc :: Addr reg }
                       | Minsd { ann :: a, fDest, fSrc :: freg }
                       | Vminsd { ann :: a, fDest, forall reg freg f2 a. X86 reg freg f2 a -> freg
rSrc1, forall reg freg f2 a. X86 reg freg f2 a -> freg
rSrc2 :: freg }
                       | Not { ann :: a, rSrc :: reg }
                       | And { ann :: a, rDest, rSrc :: reg }
                       | Cmovnle { ann :: a, rDest, rSrc :: reg }
                       | Cmovnl { ann :: a, rDest, rSrc :: reg }
                       | Cmovne { ann :: a, rDest , rSrc :: reg }
                       | Cmove { ann :: a, rDest, rSrc :: reg }
                       | Cmovl { ann :: a, rDest, rSrc :: reg }
                       | Cmovle { ann :: a, rDest, rSrc :: reg }
                       | Rdrand { ann :: a, rDest :: reg }
                       | Neg { ann :: a, rDest :: reg }
                    deriving ((forall a b. (a -> b) -> X86 reg freg f2 a -> X86 reg freg f2 b)
-> (forall a b. a -> X86 reg freg f2 b -> X86 reg freg f2 a)
-> Functor (X86 reg freg f2)
forall a b. a -> X86 reg freg f2 b -> X86 reg freg f2 a
forall a b. (a -> b) -> X86 reg freg f2 a -> X86 reg freg f2 b
forall reg freg f2 a b. a -> X86 reg freg f2 b -> X86 reg freg f2 a
forall reg freg f2 a b.
(a -> b) -> X86 reg freg f2 a -> X86 reg freg f2 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 f2 a b.
(a -> b) -> X86 reg freg f2 a -> X86 reg freg f2 b
fmap :: forall a b. (a -> b) -> X86 reg freg f2 a -> X86 reg freg f2 b
$c<$ :: forall reg freg f2 a b. a -> X86 reg freg f2 b -> X86 reg freg f2 a
<$ :: forall a b. a -> X86 reg freg f2 b -> X86 reg freg f2 a
Functor, (forall x. X86 reg freg f2 a -> Rep (X86 reg freg f2 a) x)
-> (forall x. Rep (X86 reg freg f2 a) x -> X86 reg freg f2 a)
-> Generic (X86 reg freg f2 a)
forall x. Rep (X86 reg freg f2 a) x -> X86 reg freg f2 a
forall x. X86 reg freg f2 a -> Rep (X86 reg freg f2 a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall reg freg f2 a x.
Rep (X86 reg freg f2 a) x -> X86 reg freg f2 a
forall reg freg f2 a x.
X86 reg freg f2 a -> Rep (X86 reg freg f2 a) x
$cfrom :: forall reg freg f2 a x.
X86 reg freg f2 a -> Rep (X86 reg freg f2 a) x
from :: forall x. X86 reg freg f2 a -> Rep (X86 reg freg f2 a) x
$cto :: forall reg freg f2 a x.
Rep (X86 reg freg f2 a) x -> X86 reg freg f2 a
to :: forall x. Rep (X86 reg freg f2 a) x -> X86 reg freg f2 a
Generic)

instance (NFData a, NFData reg, NFData freg, NFData f2) => NFData (X86 reg freg f2 a) where

instance Copointed (X86 reg freg f2reg) where copoint :: forall a. X86 reg freg f2reg a -> a
copoint = X86 reg freg f2reg a -> a
forall reg freg f2 a. X86 reg freg f2 a -> a
ann

instance (Pretty reg, Pretty freg, Pretty f2reg) => Pretty (X86 reg freg f2reg a) where
    pretty :: forall ann. X86 reg freg f2reg a -> Doc ann
pretty (J a
_ Label
l)                       = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"jmp" 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 (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
forall ann. Doc ann
colon
    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 (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 (MovRL a
_ reg
r Int
l)                 = 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
<+> 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 (MovRI a
_ reg
r Int64
i)                 = 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
<+> Int64 -> Doc ann
forall ann. Int64 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int64
i)
    pretty (XorRR a
_ reg
r0 reg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"xor" 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 (MovqXR a
_ freg
r0 reg
r1)              = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"movq" 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
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1)
    pretty (IAddRR a
_ reg
r0 reg
r1)              = 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
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 (IAddRI a
_ reg
r Int64
i)                = 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
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
<+> Int64 -> Doc ann
forall ann. Int64 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int64
i)
    pretty (ISubRR a
_ reg
r0 reg
r1)              = 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
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 (ISubRI a
_ reg
r Int64
i)                = 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
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
<+> Int64 -> Doc ann
forall ann. Int64 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int64
i)
    pretty (IMulRR a
_ reg
r0 reg
r1)              = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"imul" 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 (IMulRA a
_ reg
r Addr reg
a)                = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"imul" 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 (Jne a
_ Label
l)                     = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"jne" 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 (Jle a
_ Label
l)                     = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"jle" 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 (Je a
_ Label
l)                      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"je" 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 (Jge a
_ Label
l)                     = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"jge" 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 (Jg a
_ Label
l)                      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"jg" 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 (Jl a
_ Label
l)                      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"jl" 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 Ret{}                         = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"ret"
    pretty (Vdivsd a
_ freg
rD freg
r0 freg
r1)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vdivsd" 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 (Movapd a
_ freg
r0 freg
r1)              = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"movapd" 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 (Cvttsd2si a
_ reg
r0 freg
r1)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cvttsd2si" 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
<+> freg -> Doc ann
forall ann. freg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty freg
r1)
    pretty (Vmulsd a
_ freg
rD freg
r0 freg
r1)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vmulsd" 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 (Vaddsd a
_ freg
rD freg
r0 freg
r1)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vaddsd" 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 (VaddsdA a
_ freg
rD freg
r Addr reg
a)            = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vaddsd" 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
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 (Vsubsd a
_ freg
rD freg
r0 freg
r1)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vsubsd" 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 (Cvtsi2sd a
_ freg
r0 reg
r1)            = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cvtsi2sd" 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
<+> reg -> Doc ann
forall ann. reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty reg
r1)
    pretty (Roundsd a
_ freg
r0 freg
r1 RoundMode
m)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"roundsd" 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 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
<+> RoundMode -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. RoundMode -> Doc ann
pretty RoundMode
m)
    pretty (CmpRI a
_ reg
r Int32
i)                 = 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
<+> Int32 -> Doc ann
forall ann. Int32 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int32
i)
    pretty (Divsd a
_ freg
r0 freg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"divsd" 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 (Mulsd a
_ freg
r0 freg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"mulsd" 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 (Addsd a
_ freg
r0 freg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"addsd" 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 (Subsd a
_ freg
r0 freg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"subsd" 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 (MovRA a
_ reg
r Addr reg
a)                 = 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
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a)
    pretty (MovAR a
_ Addr reg
a reg
r)                 = 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
<+> Addr reg -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Addr reg -> Doc ann
pretty Addr reg
a 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 (MovAI32 a
_ Addr reg
a Int32
i)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"mov qword" 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 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
<+> Int32 -> Doc ann
forall ann. Int32 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int32
i)
    pretty (MovqXA a
_ freg
x Addr reg
a)                = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"movq" 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
x 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 (MovqAX a
_ Addr reg
a freg
x)                = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"movq" 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 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
x)
    pretty (Fld a
_ Addr reg
a)                     = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fld qword" 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 Fyl2x{}                       = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fyl2x"
    pretty (Fstp a
_ Addr reg
a)                    = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fstp qword" 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 F2xm1{}                       = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"f2xm1"
    pretty Fldl2e{}                      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fldl2e"
    pretty Fldln2{}                      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fldln2"
    pretty Fld1{}                        = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fld1"
    pretty Fsin{}                        = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fsin"
    pretty Fcos{}                        = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fcos"
    pretty Fprem{}                       = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fprem"
    pretty Faddp{}                       = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"faddp"
    pretty Fscale{}                      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fscale"
    pretty Fninit{}                      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fninit"
    pretty (Fxch a
_ ST
st)                   = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fxch" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> ST -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. ST -> Doc ann
pretty ST
st)
    pretty (FldS a
_ ST
st)                   = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"fld" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> ST -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. ST -> Doc ann
pretty ST
st)
    pretty Fmulp{}                       = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"fmulp"
    pretty (Vfmadd231sd a
_ freg
rD freg
r0 freg
r1)      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vfmadd231sd" 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 (Vfmnadd231sd a
_ freg
rD freg
r0 freg
r1)     = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vfmnadd231sd" 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 (Vfmadd213sd a
_ freg
rD freg
r0 freg
r1)      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vfmadd213sd" 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 (Vfmsub231sd a
_ freg
rD freg
r0 freg
r1)      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vfsubd231sd" 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 (Vfmsub213sd a
_ freg
rD freg
r0 freg
r1)      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vfsubd213sd" 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 (Vfmsub132sd a
_ freg
rD freg
r0 freg
r1)      = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vfsubd132sd" 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 (Vfmadd231sdA a
_ freg
rD freg
r Addr reg
a)       = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vfmadd231sd" 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
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 (Push a
_ reg
r)                    = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"push" 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 (Pop a
_ reg
r)                     = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"pop" 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 (IDiv a
_ reg
r)                    = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"idiv" 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 (Call a
_ CFunc
f)                    = 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
<+> CFunc -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. CFunc -> Doc ann
pretty CFunc
f Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
"wrt ..plt")
    pretty (Sal a
_ reg
r Int8
i)                   = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"sal" 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
<+> Int8 -> Doc ann
forall ann. Int8 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int8
i)
    pretty (Sar a
_ reg
r Int8
i)                   = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"sar" 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
<+> Int8 -> Doc ann
forall ann. Int8 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int8
i)
    pretty (Sqrtsd a
_ freg
r0 freg
r1)              = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"sqrtsd" 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 (Maxsd a
_ freg
r0 freg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"maxsd" 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 (Vmaxsd a
_ freg
r0 freg
r1 freg
r2)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vmaxsd" 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 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
r2)
    pretty (VmaxsdA a
_ freg
r0 freg
r1 Addr reg
a)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vmaxsd" 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 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 (Minsd a
_ freg
r0 freg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"minsd" 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 (Vminsd a
_ freg
r0 freg
r1 freg
r2)           = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vminsd" 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 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
r2)
    pretty (Not a
_ reg
r)                     = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"not" 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 (And a
_ reg
r0 reg
r1)                 = 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
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 (Cmovnle a
_ reg
r0 reg
r1)             = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cmovnle" 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 (Cmovnl a
_ reg
r0 reg
r1)              = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cmovnl" 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 (Cmovne a
_ reg
r0 reg
r1)              = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cmovne" 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 (Cmove a
_ reg
r0 reg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cmove" 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 (Cmovl a
_ reg
r0 reg
r1)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cmovl" 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 (Cmovle a
_ reg
r0 reg
r1)              = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"cmovle" 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 (Rdrand a
_ reg
r)                  = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"rdrand" 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 (Test a
_ reg
r0 reg
r1)                = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"test" 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 (TestI a
_ reg
r0 Int32
i)                = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"test" 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
<+> Int32 -> Doc ann
forall ann. Int32 -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Int32
i)
    pretty (MovqRX a
_ reg
r freg
xr)               = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"movq" 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
xr)
    pretty (Vcmppd a
_ freg
xr0 freg
xr1 freg
xr2 Pred
Eqoq)   = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vcmpeqpd" 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 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
xr2)
    pretty (Vcmppd a
_ freg
xr0 freg
xr1 freg
xr2 Pred
Ltos)   = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vcmpltpd" 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 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
xr2)
    pretty (Vcmppd a
_ freg
xr0 freg
xr1 freg
xr2 Pred
Leos)   = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vcmplepd" 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 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
xr2)
    pretty (Vcmppd a
_ freg
xr0 freg
xr1 freg
xr2 Pred
Unordq) = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vcmpunordpd" 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 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
xr2)
    pretty (Vcmppd a
_ freg
xr0 freg
xr1 freg
xr2 Pred
Nequq)  = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vcmpneqpd" 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 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
xr2)
    pretty (Vcmppd a
_ freg
xr0 freg
xr1 freg
xr2 Pred
Nltus)  = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vcmpnltpd" 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 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
xr2)
    pretty (Vcmppd a
_ freg
xr0 freg
xr1 freg
xr2 Pred
Nleus)  = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vcmpnlepd" 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 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
xr2)
    pretty (Vcmppd a
_ freg
xr0 freg
xr1 freg
xr2 Pred
Ordq)   = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 (Doc ann
"vcmpordpd" 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 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
xr2)
    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
prettyLabel Label
l)
    pretty RetL{}                        = Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
i4 Doc ann
"ret"
    pretty (Neg a
_ reg
r)                     = 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
r)

instance (Pretty reg, Pretty freg, Pretty f2) => Show (X86 reg freg f2 a) where show :: X86 reg freg f2 a -> [Char]
show = Doc Any -> [Char]
forall a. Show a => a -> [Char]
show (Doc Any -> [Char])
-> (X86 reg freg f2 a -> Doc Any) -> X86 reg freg f2 a -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. X86 reg freg f2 a -> Doc Any
forall a ann. Pretty a => a -> Doc ann
forall ann. X86 reg freg f2 a -> Doc ann
pretty

prettyLive :: (Pretty reg, Pretty freg, Pretty f2, Pretty o) => X86 reg freg f2 o -> Doc ann
prettyLive :: forall reg freg f2 o ann.
(Pretty reg, Pretty freg, Pretty f2, Pretty o) =>
X86 reg freg f2 o -> Doc ann
prettyLive X86 reg freg f2 o
r = X86 reg freg f2 o -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. X86 reg freg f2 o -> Doc ann
pretty X86 reg freg f2 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 (X86 reg freg f2 o -> o
forall reg freg f2 a. X86 reg freg f2 a -> a
ann X86 reg freg f2 o
r)

prettyDebugX86 :: (Pretty freg, Pretty reg, Pretty f2reg, Pretty o) => [X86 reg freg f2reg o] -> Doc ann
prettyDebugX86 :: forall freg reg f2reg o ann.
(Pretty freg, Pretty reg, Pretty f2reg, Pretty o) =>
[X86 reg freg f2reg o] -> Doc ann
prettyDebugX86 = [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
prettyLines ([Doc ann] -> Doc ann)
-> ([X86 reg freg f2reg o] -> [Doc ann])
-> [X86 reg freg f2reg o]
-> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (X86 reg freg f2reg o -> Doc ann)
-> [X86 reg freg f2reg o] -> [Doc ann]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap X86 reg freg f2reg o -> Doc ann
forall reg freg f2 o ann.
(Pretty reg, Pretty freg, Pretty f2, Pretty o) =>
X86 reg freg f2 o -> Doc ann
prettyLive

(@<>) :: Semigroup m => (reg -> m) -> Addr reg -> m
@<> :: forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
(@<>) reg -> m
f (R reg
r)           = reg -> m
f reg
r
(@<>) reg -> m
f (RC reg
r Int8
_)        = reg -> m
f reg
r
(@<>) reg -> m
f (RC32 reg
r Int32
_)      = reg -> m
f reg
r
(@<>) reg -> m
f (RS reg
r0 Scale
_ reg
r1)    = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
(@<>) reg -> m
f (RSD reg
r0 Scale
_ reg
r1 Int8
_) = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1

mapR :: (areg -> reg) -> X86 areg afreg af2 a -> X86 reg afreg af2 a
mapR :: forall areg reg afreg af2 a.
(areg -> reg) -> X86 areg afreg af2 a -> X86 reg afreg af2 a
mapR areg -> reg
f (MovRR a
l areg
r0 areg
r1)              = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
MovRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (MovRL a
x areg
r Int
l)                = a -> reg -> Int -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Int -> X86 reg freg f2 a
MovRL a
x (areg -> reg
f areg
r) Int
l
mapR areg -> reg
_ (Jg a
x Label
l)                     = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jg a
x Label
l
mapR areg -> reg
_ (Je a
x Label
l)                     = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Je a
x Label
l
mapR areg -> reg
_ (Jge a
x Label
l)                    = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jge a
x Label
l
mapR areg -> reg
_ (Jne a
x Label
l)                    = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jne a
x Label
l
mapR areg -> reg
_ (J a
x Label
l)                      = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
J a
x Label
l
mapR areg -> reg
_ (Jl a
x Label
l)                     = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jl a
x Label
l
mapR areg -> reg
_ (Jle a
x Label
l)                    = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jle a
x Label
l
mapR areg -> reg
_ (Label a
x Label
l)                  = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Label a
x Label
l
mapR areg -> reg
f (IMulRR a
l areg
r0 areg
r1)             = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
IMulRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (IMulRA a
l areg
r Addr areg
a)               = a -> reg -> Addr reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
IMulRA 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 (IAddRR a
l areg
r0 areg
r1)             = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
IAddRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (ISubRR a
l areg
r0 areg
r1)             = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
ISubRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (CmpRR a
l areg
r0 areg
r1)              = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
CmpRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (ISubRI a
l areg
r0 Int64
i)              = a -> reg -> Int64 -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
ISubRI a
l (areg -> reg
f areg
r0) Int64
i
mapR areg -> reg
f (IAddRI a
l areg
r0 Int64
i)              = a -> reg -> Int64 -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
IAddRI a
l (areg -> reg
f areg
r0) Int64
i
mapR areg -> reg
f (MovRI a
l areg
r0 Int64
i)               = a -> reg -> Int64 -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
MovRI a
l (areg -> reg
f areg
r0) Int64
i
mapR areg -> reg
f (MovRA a
l areg
r Addr areg
a)                = a -> reg -> Addr reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
MovRA 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 (MovAR a
l Addr areg
a areg
r)                = a -> Addr reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Addr reg -> reg -> X86 reg freg f2 a
MovAR a
l (areg -> reg
f(areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>Addr areg
a) (areg -> reg
f areg
r)
mapR areg -> reg
f (MovAI32 a
l Addr areg
a Int32
i)              = a -> Addr reg -> Int32 -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Addr reg -> Int32 -> X86 reg freg f2 a
MovAI32 a
l (areg -> reg
f(areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>Addr areg
a) Int32
i

mapR areg -> reg
f (MovqXR a
l afreg
xr areg
r)              = a -> afreg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> reg -> X86 reg freg f2 a
MovqXR a
l afreg
xr (areg -> reg
f areg
r)
mapR areg -> reg
f (MovqXA a
l afreg
xr Addr areg
a)              = a -> afreg -> Addr reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> Addr reg -> X86 reg freg f2 a
MovqXA 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 (MovqAX a
l Addr areg
a afreg
xr)              = a -> Addr reg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Addr reg -> freg -> X86 reg freg f2 a
MovqAX a
l (areg -> reg
f(areg -> reg) -> Addr areg -> Addr reg
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>Addr areg
a) afreg
xr
mapR areg -> reg
f (Fld a
l Addr areg
a)                    = a -> Addr reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Addr reg -> X86 reg freg f2 a
Fld a
l (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
_ (Fldl2e a
l)                   = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fldl2e a
l
mapR areg -> reg
_ (Fldln2 a
l)                   = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fldln2 a
l
mapR areg -> reg
_ (Fld1 a
l)                     = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fld1 a
l
mapR areg -> reg
_ (Fyl2x a
l)                    = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fyl2x a
l
mapR areg -> reg
f (Fstp a
l Addr areg
a)                   = a -> Addr reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Addr reg -> X86 reg freg f2 a
Fstp a
l (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
_ (F2xm1 a
l)                    = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
F2xm1 a
l
mapR areg -> reg
_ (Fmulp a
l)                    = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fmulp a
l
mapR areg -> reg
_ (Fprem a
l)                    = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fprem a
l
mapR areg -> reg
_ (Faddp a
l)                    = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Faddp a
l
mapR areg -> reg
_ (Fscale a
l)                   = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fscale a
l
mapR areg -> reg
f (CmpRI a
l areg
r Int32
i)                = a -> reg -> Int32 -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Int32 -> X86 reg freg f2 a
CmpRI a
l (areg -> reg
f areg
r) Int32
i
mapR areg -> reg
_ (Ret a
l)                      = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Ret a
l
mapR areg -> reg
_ (Vdivsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vdivsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Movapd a
l afreg
xr0 afreg
xr1)           = a -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Movapd a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (FldS a
l ST
s)                   = a -> ST -> X86 reg afreg af2 a
forall reg freg f2 a. a -> ST -> X86 reg freg f2 a
FldS a
l ST
s
mapR areg -> reg
_ (Fxch a
l ST
s)                   = a -> ST -> X86 reg afreg af2 a
forall reg freg f2 a. a -> ST -> X86 reg freg f2 a
Fxch a
l ST
s
mapR areg -> reg
_ (Mulsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Mulsd a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (Addsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Addsd a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (Subsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Subsd a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (Divsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Divsd a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (Vmulsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vmulsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Vaddsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vaddsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
f (VaddsdA a
l afreg
xr0 afreg
xr1 Addr areg
a)        = a -> afreg -> afreg -> Addr reg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
VaddsdA a
l afreg
xr0 afreg
xr1 (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
_ (Vsubsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vsubsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
f (Cvttsd2si a
l areg
r afreg
xr)           = a -> reg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> freg -> X86 reg freg f2 a
Cvttsd2si a
l (areg -> reg
f areg
r) afreg
xr
mapR areg -> reg
f (Push a
l areg
r)                   = a -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Push a
l (areg -> reg
f areg
r)
mapR areg -> reg
f (Pop a
l areg
r)                    = a -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Pop a
l (areg -> reg
f areg
r)
mapR areg -> reg
_ (Call a
l CFunc
f)                   = a -> CFunc -> X86 reg afreg af2 a
forall reg freg f2 a. a -> CFunc -> X86 reg freg f2 a
Call a
l CFunc
f
mapR areg -> reg
f (IDiv a
l areg
r)                   = a -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
IDiv a
l (areg -> reg
f areg
r)
mapR areg -> reg
_ (Roundsd a
l afreg
xr0 afreg
xr1 RoundMode
m)        = a -> afreg -> afreg -> RoundMode -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> RoundMode -> X86 reg freg f2 a
Roundsd a
l afreg
xr0 afreg
xr1 RoundMode
m
mapR areg -> reg
f (Cvtsi2sd a
l afreg
xr areg
r)            = a -> afreg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> reg -> X86 reg freg f2 a
Cvtsi2sd a
l afreg
xr (areg -> reg
f areg
r)
mapR areg -> reg
_ (Vfmadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Vfmnadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmnadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Vfmadd213sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmadd213sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Vfmsub213sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub213sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Vfmsub231sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub231sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Vfmsub132sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub132sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
f (Vfmadd231sdA a
l afreg
xr0 afreg
xr Addr areg
a)    = a -> afreg -> afreg -> Addr reg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
Vfmadd231sdA a
l afreg
xr0 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 (Sal a
l areg
r Int8
i)                  = a -> reg -> Int8 -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Int8 -> X86 reg freg f2 a
Sal a
l (areg -> reg
f areg
r) Int8
i
mapR areg -> reg
f (Sar a
l areg
r Int8
i)                  = a -> reg -> Int8 -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Int8 -> X86 reg freg f2 a
Sar a
l (areg -> reg
f areg
r) Int8
i
mapR areg -> reg
_ (Sqrtsd a
l afreg
xr0 afreg
xr1)           = a -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Sqrtsd a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (Maxsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Maxsd a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (Minsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Minsd a
l afreg
xr0 afreg
xr1
mapR areg -> reg
_ (Vmaxsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vmaxsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
_ (Vminsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vminsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapR areg -> reg
f (VmaxsdA a
l afreg
xr0 afreg
xr1 Addr areg
a)        = a -> afreg -> afreg -> Addr reg -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
VmaxsdA a
l afreg
xr0 afreg
xr1 (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 (Not a
l areg
r)                    = a -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Not a
l (areg -> reg
f areg
r)
mapR areg -> reg
f (And a
l areg
r0 areg
r1)                = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
And a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (Rdrand a
l areg
r)                 = a -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Rdrand a
l (areg -> reg
f areg
r)
mapR areg -> reg
f (Cmovnle a
l areg
r0 areg
r1)            = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovnle a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (Cmovnl a
l areg
r0 areg
r1)             = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovnl a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (Cmovne a
l areg
r0 areg
r1)             = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovne a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (Cmove a
l areg
r0 areg
r1)              = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmove a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (Cmovl a
l areg
r0 areg
r1)              = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovl a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (Cmovle a
l areg
r0 areg
r1)             = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovle a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
_ (Fninit a
l)                   = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fninit a
l
mapR areg -> reg
f (Test a
l areg
r0 areg
r1)               = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Test a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
f (TestI a
l areg
r Int32
i)                = a -> reg -> Int32 -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> Int32 -> X86 reg freg f2 a
TestI a
l (areg -> reg
f areg
r) Int32
i
mapR areg -> reg
_ (Vcmppd a
l afreg
xr0 afreg
xr1 afreg
xr2 Pred
p)     = a -> afreg -> afreg -> afreg -> Pred -> X86 reg afreg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> Pred -> X86 reg freg f2 a
Vcmppd a
l afreg
xr0 afreg
xr1 afreg
xr2 Pred
p
mapR areg -> reg
f (MovqRX a
l areg
r afreg
xr)              = a -> reg -> afreg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> freg -> X86 reg freg f2 a
MovqRX a
l (areg -> reg
f areg
r) afreg
xr
mapR areg -> reg
_ (Fsin a
l)                     = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fsin a
l
mapR areg -> reg
_ (Fcos a
l)                     = a -> X86 reg afreg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fcos a
l
mapR areg -> reg
f (XorRR a
l areg
r0 areg
r1)              = a -> reg -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
XorRR a
l (areg -> reg
f areg
r0) (areg -> reg
f areg
r1)
mapR areg -> reg
_ (C a
a Label
l)                      = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
C a
a Label
l
mapR areg -> reg
_ (RetL a
a Label
l)                   = a -> Label -> X86 reg afreg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
RetL a
a Label
l
mapR areg -> reg
f (Neg a
a areg
r)                    = a -> reg -> X86 reg afreg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Neg a
a (areg -> reg
f areg
r)

fR :: (Monoid m) => (reg -> m) -> X86 reg freg f2reg a -> m
fR :: forall m reg freg f2reg a.
Monoid m =>
(reg -> m) -> X86 reg freg f2reg a -> m
fR reg -> m
_ Jg{}                   = m
forall a. Monoid a => a
mempty
fR reg -> m
_ J{}                    = m
forall a. Monoid a => a
mempty
fR reg -> m
f (MovAR a
_ Addr reg
a reg
r)          = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r
fR reg -> m
f (MovRA a
_ reg
r Addr reg
a)          = reg -> m
f reg
r m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
f (MovRR a
_ reg
r0 reg
r1)        = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (MovRL a
_ reg
r Int
_)          = reg -> m
f reg
r
fR reg -> m
_ Label{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
f (IAddRR a
_ reg
r0 reg
r1)       = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (IAddRI a
_ reg
r Int64
_)         = reg -> m
f reg
r
fR reg -> m
f (ISubRR a
_ reg
r0 reg
r1)       = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (ISubRI a
_ reg
r Int64
_)         = reg -> m
f reg
r
fR reg -> m
f (IMulRR a
_ reg
r0 reg
r1)       = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (IMulRA a
_ reg
r Addr reg
a)         = reg -> m
f reg
r m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
f (XorRR a
_ reg
r0 reg
r1)        = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (MovAI32 a
_ Addr reg
a Int32
_)        = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
f (MovRI a
_ reg
r Int64
_)          = reg -> m
f reg
r
fR reg -> m
f (MovqXR a
_ freg
_ reg
r)         = reg -> m
f reg
r
fR reg -> m
f (MovqXA a
_ freg
_ Addr reg
a)         = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
f (MovqAX a
_ Addr reg
a freg
_)         = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
f (MovqRX a
_ reg
r freg
_)         = reg -> m
f reg
r
fR reg -> m
f (Fld a
_ Addr reg
a)              = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
_ FldS{}                 = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fldl2e{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fldln2{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fld1{}                 = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fyl2x{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fsin{}                 = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fcos{}                 = m
forall a. Monoid a => a
mempty
fR reg -> m
f (Fstp a
_ Addr reg
a)             = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
_ F2xm1{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fmulp{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fprem{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Faddp{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fscale{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fninit{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Fxch{}                 = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Je{}                   = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Jne{}                  = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Jge{}                  = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Jl{}                   = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Jle{}                  = m
forall a. Monoid a => a
mempty
fR reg -> m
_ C{}                    = m
forall a. Monoid a => a
mempty
fR reg -> m
f (CmpRR a
_ reg
r0 reg
r1)        = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (CmpRI a
_ reg
r Int32
_)          = reg -> m
f reg
r
fR reg -> m
f (Test a
_ reg
r0 reg
r1)         = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
_ Vcmppd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
f (TestI a
_ reg
r Int32
_)          = reg -> m
f reg
r
fR reg -> m
_ Ret{}                  = m
forall a. Monoid a => a
mempty
fR reg -> m
_ RetL{}                 = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vdivsd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Movapd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Roundsd{}              = m
forall a. Monoid a => a
mempty
fR reg -> m
f (Cvttsd2si a
_ reg
r freg
_)      = reg -> m
f reg
r
fR reg -> m
_ Mulsd{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Addsd{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Subsd{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Divsd{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vmulsd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vaddsd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
f (VaddsdA a
_ freg
_ freg
_ Addr reg
a)      = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
_ Vsubsd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
f (Cvtsi2sd a
_ freg
_ reg
r)       = reg -> m
f reg
r
fR reg -> m
_ Vfmadd231sd{}          = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vfmnadd231sd{}         = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vfmadd213sd{}          = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vfmsub213sd{}          = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vfmsub231sd{}          = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vfmsub132sd{}          = m
forall a. Monoid a => a
mempty
fR reg -> m
f (Vfmadd231sdA a
_ freg
_ freg
_ Addr reg
a) = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
f (Push a
_ reg
r)             = reg -> m
f reg
r
fR reg -> m
f (Pop a
_ reg
r)              = reg -> m
f reg
r
fR reg -> m
_ Call{}                 = m
forall a. Monoid a => a
mempty
fR reg -> m
f (IDiv a
_ reg
r)             = reg -> m
f reg
r
fR reg -> m
f (Sal a
_ reg
r Int8
_)            = reg -> m
f reg
r
fR reg -> m
f (Sar a
_ reg
r Int8
_)            = reg -> m
f reg
r
fR reg -> m
_ Sqrtsd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Maxsd{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vmaxsd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
f (VmaxsdA a
_ freg
_ freg
_ Addr reg
a)      = reg -> m
f (reg -> m) -> Addr reg -> m
forall m reg. Semigroup m => (reg -> m) -> Addr reg -> m
@<> Addr reg
a
fR reg -> m
_ Minsd{}                = m
forall a. Monoid a => a
mempty
fR reg -> m
_ Vminsd{}               = m
forall a. Monoid a => a
mempty
fR reg -> m
f (Not a
_ reg
r)              = reg -> m
f reg
r
fR reg -> m
f (And a
_ reg
r0 reg
r1)          = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (Cmovnle a
_ reg
r0 reg
r1)      = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (Cmovnl a
_ reg
r0 reg
r1)       = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (Cmovne a
_ reg
r0 reg
r1)       = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (Cmove a
_ reg
r0 reg
r1)        = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (Cmovl a
_ reg
r0 reg
r1)        = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (Cmovle a
_ reg
r0 reg
r1)       = reg -> m
f reg
r0 m -> m -> m
forall a. Semigroup a => a -> a -> a
<> reg -> m
f reg
r1
fR reg -> m
f (Rdrand a
_ reg
r)           = reg -> m
f reg
r
fR reg -> m
f (Neg a
_ reg
r)              = reg -> m
f reg
r

mapF2 :: (af2 -> f2) -> X86 areg afreg af2 a -> X86 areg afreg f2 a
mapF2 :: forall af2 f2 areg afreg a.
(af2 -> f2) -> X86 areg afreg af2 a -> X86 areg afreg f2 a
mapF2 af2 -> f2
_ (Jg a
x Label
l)                     = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jg a
x Label
l
mapF2 af2 -> f2
_ (J a
x Label
l)                      = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
J a
x Label
l
mapF2 af2 -> f2
_ (Label a
x Label
l)                  = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Label a
x Label
l
mapF2 af2 -> f2
_ (MovRI a
l areg
r Int64
i)                = a -> areg -> Int64 -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
MovRI a
l areg
r Int64
i
mapF2 af2 -> f2
_ (MovRR a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
MovRR a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (MovRL a
x areg
r Int
l)                = a -> areg -> Int -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Int -> X86 reg freg f2 a
MovRL a
x areg
r Int
l
mapF2 af2 -> f2
_ (IAddRI a
l areg
r Int64
i)               = a -> areg -> Int64 -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
IAddRI a
l areg
r Int64
i
mapF2 af2 -> f2
_ (Movapd a
l afreg
r0 afreg
r1)             = a -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Movapd a
l afreg
r0 afreg
r1
mapF2 af2 -> f2
_ (Mulsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Mulsd a
l afreg
xr0 afreg
xr1
mapF2 af2 -> f2
_ (MovqXR a
l afreg
xr areg
r)              = a -> afreg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> reg -> X86 reg freg f2 a
MovqXR a
l afreg
xr areg
r
mapF2 af2 -> f2
_ (Roundsd a
l afreg
xr0 afreg
xr1 RoundMode
s)        = a -> afreg -> afreg -> RoundMode -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> RoundMode -> X86 reg freg f2 a
Roundsd a
l afreg
xr0 afreg
xr1 RoundMode
s
mapF2 af2 -> f2
_ (Cvttsd2si a
l areg
r afreg
xr)           = a -> areg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> freg -> X86 reg freg f2 a
Cvttsd2si a
l areg
r afreg
xr
mapF2 af2 -> f2
_ (Vsubsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vsubsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Vaddsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vaddsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (VaddsdA a
l afreg
xr0 afreg
xr1 Addr areg
r)        = a -> afreg -> afreg -> Addr areg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
VaddsdA a
l afreg
xr0 afreg
xr1 Addr areg
r
mapF2 af2 -> f2
_ (Vdivsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vdivsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (CmpRR a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
CmpRR a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Addsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Addsd a
l afreg
xr0 afreg
xr1
mapF2 af2 -> f2
_ (IAddRR a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
IAddRR a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (ISubRR a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
ISubRR a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (IMulRR a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
IMulRR a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (IMulRA a
l areg
r Addr areg
a)               = a -> areg -> Addr areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
IMulRA a
l areg
r Addr areg
a
mapF2 af2 -> f2
_ (ISubRI a
l areg
r Int64
i)               = a -> areg -> Int64 -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
ISubRI a
l areg
r Int64
i
mapF2 af2 -> f2
_ (MovRA a
l areg
r Addr areg
a)                = a -> areg -> Addr areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
MovRA a
l areg
r Addr areg
a
mapF2 af2 -> f2
_ (MovAI32 a
l Addr areg
r Int32
i)              = a -> Addr areg -> Int32 -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Addr reg -> Int32 -> X86 reg freg f2 a
MovAI32 a
l Addr areg
r Int32
i
mapF2 af2 -> f2
_ (MovAR a
l Addr areg
a areg
r)                = a -> Addr areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Addr reg -> reg -> X86 reg freg f2 a
MovAR a
l Addr areg
a areg
r
mapF2 af2 -> f2
_ (MovqXA a
l afreg
xr Addr areg
a)              = a -> afreg -> Addr areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> Addr reg -> X86 reg freg f2 a
MovqXA a
l afreg
xr Addr areg
a
mapF2 af2 -> f2
_ (MovqAX a
l Addr areg
a afreg
xr)              = a -> Addr areg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Addr reg -> freg -> X86 reg freg f2 a
MovqAX a
l Addr areg
a afreg
xr
mapF2 af2 -> f2
_ (Fld a
l Addr areg
a)                    = a -> Addr areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Addr reg -> X86 reg freg f2 a
Fld a
l Addr areg
a
mapF2 af2 -> f2
_ (FldS a
l ST
s)                   = a -> ST -> X86 areg afreg f2 a
forall reg freg f2 a. a -> ST -> X86 reg freg f2 a
FldS a
l ST
s
mapF2 af2 -> f2
_ (Fldl2e a
l)                   = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fldl2e a
l
mapF2 af2 -> f2
_ (Fldln2 a
l)                   = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fldln2 a
l
mapF2 af2 -> f2
_ (Fld1 a
l)                     = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fld1 a
l
mapF2 af2 -> f2
_ (Fyl2x a
l)                    = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fyl2x a
l
mapF2 af2 -> f2
_ (Fstp a
l Addr areg
a)                   = a -> Addr areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Addr reg -> X86 reg freg f2 a
Fstp a
l Addr areg
a
mapF2 af2 -> f2
_ (F2xm1 a
l)                    = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
F2xm1 a
l
mapF2 af2 -> f2
_ (Fmulp a
l)                    = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fmulp a
l
mapF2 af2 -> f2
_ (Fprem a
l)                    = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fprem a
l
mapF2 af2 -> f2
_ (Faddp a
l)                    = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Faddp a
l
mapF2 af2 -> f2
_ (Fscale a
l)                   = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fscale a
l
mapF2 af2 -> f2
_ (Fninit a
l)                   = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fninit a
l
mapF2 af2 -> f2
_ (Fxch a
l ST
s)                   = a -> ST -> X86 areg afreg f2 a
forall reg freg f2 a. a -> ST -> X86 reg freg f2 a
Fxch a
l ST
s
mapF2 af2 -> f2
_ (Je a
x Label
l)                     = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Je a
x Label
l
mapF2 af2 -> f2
_ (Jge a
x Label
l)                    = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jge a
x Label
l
mapF2 af2 -> f2
_ (Jne a
x Label
l)                    = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jne a
x Label
l
mapF2 af2 -> f2
_ (Jl a
x Label
l)                     = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jl a
x Label
l
mapF2 af2 -> f2
_ (Jle a
x Label
l)                    = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jle a
x Label
l
mapF2 af2 -> f2
_ (CmpRI a
l areg
r Int32
i)                = a -> areg -> Int32 -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Int32 -> X86 reg freg f2 a
CmpRI a
l areg
r Int32
i
mapF2 af2 -> f2
_ (Ret a
l)                      = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Ret a
l
mapF2 af2 -> f2
_ (Subsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Subsd a
l afreg
xr0 afreg
xr1
mapF2 af2 -> f2
_ (Divsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Divsd a
l afreg
xr0 afreg
xr1
mapF2 af2 -> f2
_ (Vmulsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vmulsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Push a
l areg
r)                   = a -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Push a
l areg
r
mapF2 af2 -> f2
_ (Pop a
l areg
r)                    = a -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Pop a
l areg
r
mapF2 af2 -> f2
_ (IDiv a
l areg
r)                   = a -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
IDiv a
l areg
r
mapF2 af2 -> f2
_ (Call a
l CFunc
f)                   = a -> CFunc -> X86 areg afreg f2 a
forall reg freg f2 a. a -> CFunc -> X86 reg freg f2 a
Call a
l CFunc
f
mapF2 af2 -> f2
_ (Sal a
l areg
r Int8
i)                  = a -> areg -> Int8 -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Int8 -> X86 reg freg f2 a
Sal a
l areg
r Int8
i
mapF2 af2 -> f2
_ (Sar a
l areg
r Int8
i)                  = a -> areg -> Int8 -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Int8 -> X86 reg freg f2 a
Sar a
l areg
r Int8
i
mapF2 af2 -> f2
_ (Maxsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Maxsd a
l afreg
xr0 afreg
xr1
mapF2 af2 -> f2
_ (Vmaxsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vmaxsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (VmaxsdA a
l afreg
xr0 afreg
xr1 Addr areg
a)        = a -> afreg -> afreg -> Addr areg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
VmaxsdA a
l afreg
xr0 afreg
xr1 Addr areg
a
mapF2 af2 -> f2
_ (Minsd a
l afreg
xr0 afreg
xr1)            = a -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Minsd a
l afreg
xr0 afreg
xr1
mapF2 af2 -> f2
_ (Vminsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vminsd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Not a
l areg
r)                    = a -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Not a
l areg
r
mapF2 af2 -> f2
_ (Cvtsi2sd a
l afreg
xr areg
r)            = a -> afreg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> reg -> X86 reg freg f2 a
Cvtsi2sd a
l afreg
xr areg
r
mapF2 af2 -> f2
_ (Vfmadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Vfmnadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmnadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Vfmadd213sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmadd213sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Vfmsub213sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub213sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Vfmsub231sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub231sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Vfmsub132sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> afreg -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub132sd a
l afreg
xr0 afreg
xr1 afreg
xr2
mapF2 af2 -> f2
_ (Vfmadd231sdA a
l afreg
xr0 afreg
xr1 Addr areg
a)   = a -> afreg -> afreg -> Addr areg -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
Vfmadd231sdA a
l afreg
xr0 afreg
xr1 Addr areg
a
mapF2 af2 -> f2
_ (Sqrtsd a
l afreg
xr0 afreg
xr1)           = a -> afreg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Sqrtsd a
l afreg
xr0 afreg
xr1
mapF2 af2 -> f2
_ (And a
l areg
r0 areg
r1)                = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
And a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Cmovnle a
l areg
r0 areg
r1)            = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovnle a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Cmovnl a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovnl a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Cmovne a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovne a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Cmove a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmove a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Cmovl a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovl a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Cmovle a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovle a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Rdrand a
l areg
r)                 = a -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Rdrand a
l areg
r
mapF2 af2 -> f2
_ (TestI a
l areg
r Int32
i)                = a -> areg -> Int32 -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> Int32 -> X86 reg freg f2 a
TestI a
l areg
r Int32
i
mapF2 af2 -> f2
_ (Test a
l areg
r0 areg
r1)               = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Test a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (Vcmppd a
l afreg
xr0 afreg
xr1 afreg
xr2 Pred
p)     = a -> afreg -> afreg -> afreg -> Pred -> X86 areg afreg f2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> Pred -> X86 reg freg f2 a
Vcmppd a
l afreg
xr0 afreg
xr1 afreg
xr2 Pred
p
mapF2 af2 -> f2
_ (MovqRX a
l areg
r afreg
xr)              = a -> areg -> afreg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> freg -> X86 reg freg f2 a
MovqRX a
l areg
r afreg
xr
mapF2 af2 -> f2
_ (Fsin a
l)                     = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fsin a
l
mapF2 af2 -> f2
_ (Fcos a
l)                     = a -> X86 areg afreg f2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fcos a
l
mapF2 af2 -> f2
_ (XorRR a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
XorRR a
l areg
r0 areg
r1
mapF2 af2 -> f2
_ (C a
a Label
l)                      = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
C a
a Label
l
mapF2 af2 -> f2
_ (RetL a
a Label
l)                   = a -> Label -> X86 areg afreg f2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
RetL a
a Label
l
mapF2 af2 -> f2
_ (Neg a
a areg
r)                    = a -> areg -> X86 areg afreg f2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Neg a
a areg
r

mapFR :: (afreg -> freg) -> X86 areg afreg af2 a -> X86 areg freg af2 a
mapFR :: forall afreg freg areg af2 a.
(afreg -> freg) -> X86 areg afreg af2 a -> X86 areg freg af2 a
mapFR afreg -> freg
_ (Jg a
x Label
l)                     = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jg a
x Label
l
mapFR afreg -> freg
_ (J a
x Label
l)                      = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
J a
x Label
l
mapFR afreg -> freg
_ (Label a
x Label
l)                  = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Label a
x Label
l
mapFR afreg -> freg
_ (MovRI a
l areg
r Int64
i)                = a -> areg -> Int64 -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
MovRI a
l areg
r Int64
i
mapFR afreg -> freg
_ (MovRR a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
MovRR a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (MovRL a
x areg
r Int
l)                = a -> areg -> Int -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Int -> X86 reg freg f2 a
MovRL a
x areg
r Int
l
mapFR afreg -> freg
_ (IAddRI a
l areg
r Int64
i)               = a -> areg -> Int64 -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
IAddRI a
l areg
r Int64
i
mapFR afreg -> freg
f (Movapd a
l afreg
r0 afreg
r1)             = a -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Movapd a
l (afreg -> freg
f afreg
r0) (afreg -> freg
f afreg
r1)
mapFR afreg -> freg
f (Mulsd a
l afreg
xr0 afreg
xr1)            = a -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Mulsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1)
mapFR afreg -> freg
f (MovqXR a
l afreg
xr areg
r)              = a -> freg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> reg -> X86 reg freg f2 a
MovqXR a
l (afreg -> freg
f afreg
xr) areg
r
mapFR afreg -> freg
f (Roundsd a
l afreg
xr0 afreg
xr1 RoundMode
s)        = a -> freg -> freg -> RoundMode -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> RoundMode -> X86 reg freg f2 a
Roundsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) RoundMode
s
mapFR afreg -> freg
f (Cvttsd2si a
l areg
r afreg
xr)           = a -> areg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> freg -> X86 reg freg f2 a
Cvttsd2si a
l areg
r (afreg -> freg
f afreg
xr)
mapFR afreg -> freg
f (Vsubsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vsubsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Vaddsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vaddsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (VaddsdA a
l afreg
xr0 afreg
xr1 Addr areg
r)        = a -> freg -> freg -> Addr areg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
VaddsdA a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) Addr areg
r
mapFR afreg -> freg
f (Vdivsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vdivsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
_ (CmpRR a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
CmpRR a
l areg
r0 areg
r1
mapFR afreg -> freg
f (Addsd a
l afreg
xr0 afreg
xr1)            = a -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Addsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1)
mapFR afreg -> freg
_ (IAddRR a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
IAddRR a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (ISubRR a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
ISubRR a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (IMulRR a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
IMulRR a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (IMulRA a
l areg
r Addr areg
a)               = a -> areg -> Addr areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
IMulRA a
l areg
r Addr areg
a
mapFR afreg -> freg
_ (ISubRI a
l areg
r Int64
i)               = a -> areg -> Int64 -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
ISubRI a
l areg
r Int64
i
mapFR afreg -> freg
_ (MovRA a
l areg
r Addr areg
a)                = a -> areg -> Addr areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
MovRA a
l areg
r Addr areg
a
mapFR afreg -> freg
_ (MovAI32 a
l Addr areg
r Int32
i)              = a -> Addr areg -> Int32 -> X86 areg freg af2 a
forall reg freg f2 a. a -> Addr reg -> Int32 -> X86 reg freg f2 a
MovAI32 a
l Addr areg
r Int32
i
mapFR afreg -> freg
_ (MovAR a
l Addr areg
a areg
r)                = a -> Addr areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> Addr reg -> reg -> X86 reg freg f2 a
MovAR a
l Addr areg
a areg
r
mapFR afreg -> freg
f (MovqXA a
l afreg
xr Addr areg
a)              = a -> freg -> Addr areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> Addr reg -> X86 reg freg f2 a
MovqXA a
l (afreg -> freg
f afreg
xr) Addr areg
a
mapFR afreg -> freg
f (MovqAX a
l Addr areg
a afreg
xr)              = a -> Addr areg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> Addr reg -> freg -> X86 reg freg f2 a
MovqAX a
l Addr areg
a (afreg -> freg
f afreg
xr)
mapFR afreg -> freg
_ (Fld a
l Addr areg
a)                    = a -> Addr areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> Addr reg -> X86 reg freg f2 a
Fld a
l Addr areg
a
mapFR afreg -> freg
_ (FldS a
l ST
s)                   = a -> ST -> X86 areg freg af2 a
forall reg freg f2 a. a -> ST -> X86 reg freg f2 a
FldS a
l ST
s
mapFR afreg -> freg
_ (Fldl2e a
l)                   = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fldl2e a
l
mapFR afreg -> freg
_ (Fldln2 a
l)                   = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fldln2 a
l
mapFR afreg -> freg
_ (Fld1 a
l)                     = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fld1 a
l
mapFR afreg -> freg
_ (Fyl2x a
l)                    = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fyl2x a
l
mapFR afreg -> freg
_ (Fstp a
l Addr areg
a)                   = a -> Addr areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> Addr reg -> X86 reg freg f2 a
Fstp a
l Addr areg
a
mapFR afreg -> freg
_ (F2xm1 a
l)                    = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
F2xm1 a
l
mapFR afreg -> freg
_ (Fmulp a
l)                    = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fmulp a
l
mapFR afreg -> freg
_ (Fprem a
l)                    = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fprem a
l
mapFR afreg -> freg
_ (Faddp a
l)                    = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Faddp a
l
mapFR afreg -> freg
_ (Fscale a
l)                   = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fscale a
l
mapFR afreg -> freg
_ (Fninit a
l)                   = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fninit a
l
mapFR afreg -> freg
_ (Fxch a
l ST
s)                   = a -> ST -> X86 areg freg af2 a
forall reg freg f2 a. a -> ST -> X86 reg freg f2 a
Fxch a
l ST
s
mapFR afreg -> freg
_ (Je a
x Label
l)                     = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Je a
x Label
l
mapFR afreg -> freg
_ (Jge a
x Label
l)                    = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jge a
x Label
l
mapFR afreg -> freg
_ (Jne a
x Label
l)                    = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jne a
x Label
l
mapFR afreg -> freg
_ (Jl a
x Label
l)                     = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jl a
x Label
l
mapFR afreg -> freg
_ (Jle a
x Label
l)                    = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
Jle a
x Label
l
mapFR afreg -> freg
_ (CmpRI a
l areg
r Int32
i)                = a -> areg -> Int32 -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Int32 -> X86 reg freg f2 a
CmpRI a
l areg
r Int32
i
mapFR afreg -> freg
_ (Ret a
l)                      = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Ret a
l
mapFR afreg -> freg
f (Subsd a
l afreg
xr0 afreg
xr1)            = a -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Subsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1)
mapFR afreg -> freg
f (Divsd a
l afreg
xr0 afreg
xr1)            = a -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Divsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1)
mapFR afreg -> freg
f (Vmulsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vmulsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
_ (Push a
l areg
r)                   = a -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Push a
l areg
r
mapFR afreg -> freg
_ (Pop a
l areg
r)                    = a -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Pop a
l areg
r
mapFR afreg -> freg
_ (IDiv a
l areg
r)                   = a -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
IDiv a
l areg
r
mapFR afreg -> freg
_ (Call a
l CFunc
f)                   = a -> CFunc -> X86 areg freg af2 a
forall reg freg f2 a. a -> CFunc -> X86 reg freg f2 a
Call a
l CFunc
f
mapFR afreg -> freg
_ (Sal a
l areg
r Int8
i)                  = a -> areg -> Int8 -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Int8 -> X86 reg freg f2 a
Sal a
l areg
r Int8
i
mapFR afreg -> freg
_ (Sar a
l areg
r Int8
i)                  = a -> areg -> Int8 -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Int8 -> X86 reg freg f2 a
Sar a
l areg
r Int8
i
mapFR afreg -> freg
f (Maxsd a
l afreg
xr0 afreg
xr1)            = a -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Maxsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1)
mapFR afreg -> freg
f (Vmaxsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vmaxsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (VmaxsdA a
l afreg
xr0 afreg
xr1 Addr areg
a)        = a -> freg -> freg -> Addr areg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
VmaxsdA a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) Addr areg
a
mapFR afreg -> freg
f (Minsd a
l afreg
xr0 afreg
xr1)            = a -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Minsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1)
mapFR afreg -> freg
f (Vminsd a
l afreg
xr0 afreg
xr1 afreg
xr2)       = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vminsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
_ (Not a
l areg
r)                    = a -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Not a
l areg
r
mapFR afreg -> freg
f (Cvtsi2sd a
l afreg
xr areg
r)            = a -> freg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> reg -> X86 reg freg f2 a
Cvtsi2sd a
l (afreg -> freg
f afreg
xr) areg
r
mapFR afreg -> freg
f (Vfmadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmadd231sd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Vfmnadd231sd a
l afreg
xr0 afreg
xr1 afreg
xr2) = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmnadd231sd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Vfmadd213sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmadd213sd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Vfmsub213sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub213sd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Vfmsub231sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub231sd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Vfmsub132sd a
l afreg
xr0 afreg
xr1 afreg
xr2)  = a -> freg -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> X86 reg freg f2 a
Vfmsub132sd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2)
mapFR afreg -> freg
f (Vfmadd231sdA a
l afreg
xr0 afreg
xr1 Addr areg
a)   = a -> freg -> freg -> Addr areg -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> Addr reg -> X86 reg freg f2 a
Vfmadd231sdA a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) Addr areg
a
mapFR afreg -> freg
f (Sqrtsd a
l afreg
xr0 afreg
xr1)           = a -> freg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> freg -> freg -> X86 reg freg f2 a
Sqrtsd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1)
mapFR afreg -> freg
_ (And a
l areg
r0 areg
r1)                = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
And a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (Cmovnle a
l areg
r0 areg
r1)            = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovnle a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (Cmovnl a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovnl a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (Cmovne a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovne a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (Cmove a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmove a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (Cmovl a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovl a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (Cmovle a
l areg
r0 areg
r1)             = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Cmovle a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (Rdrand a
l areg
r)                 = a -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Rdrand a
l areg
r
mapFR afreg -> freg
_ (TestI a
l areg
r Int32
i)                = a -> areg -> Int32 -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> Int32 -> X86 reg freg f2 a
TestI a
l areg
r Int32
i
mapFR afreg -> freg
_ (Test a
l areg
r0 areg
r1)               = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
Test a
l areg
r0 areg
r1
mapFR afreg -> freg
f (Vcmppd a
l afreg
xr0 afreg
xr1 afreg
xr2 Pred
p)     = a -> freg -> freg -> freg -> Pred -> X86 areg freg af2 a
forall reg freg f2 a.
a -> freg -> freg -> freg -> Pred -> X86 reg freg f2 a
Vcmppd a
l (afreg -> freg
f afreg
xr0) (afreg -> freg
f afreg
xr1) (afreg -> freg
f afreg
xr2) Pred
p
mapFR afreg -> freg
f (MovqRX a
l areg
r afreg
xr)              = a -> areg -> freg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> freg -> X86 reg freg f2 a
MovqRX a
l areg
r (afreg -> freg
f afreg
xr)
mapFR afreg -> freg
_ (Fsin a
l)                     = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fsin a
l
mapFR afreg -> freg
_ (Fcos a
l)                     = a -> X86 areg freg af2 a
forall reg freg f2 a. a -> X86 reg freg f2 a
Fcos a
l
mapFR afreg -> freg
_ (XorRR a
l areg
r0 areg
r1)              = a -> areg -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> reg -> X86 reg freg f2 a
XorRR a
l areg
r0 areg
r1
mapFR afreg -> freg
_ (C a
a Label
l)                      = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
C a
a Label
l
mapFR afreg -> freg
_ (RetL a
a Label
l)                   = a -> Label -> X86 areg freg af2 a
forall reg freg f2 a. a -> Label -> X86 reg freg f2 a
RetL a
a Label
l
mapFR afreg -> freg
_ (Neg a
a areg
r)                    = a -> areg -> X86 areg freg af2 a
forall reg freg f2 a. a -> reg -> X86 reg freg f2 a
Neg a
a areg
r