{-# LANGUAGE TupleSections #-}
module Asm.X86.Byte ( allFp, assemble, assembleCtx, dbgFp ) where
import Asm.M
import Asm.X86
import Data.Bifunctor (second)
import Data.Bits (Bits, rotateR, shiftL, (.&.), (.|.))
import qualified Data.ByteString as BS
import Data.Functor (($>))
import Data.Int (Int32, Int64, Int8)
import qualified Data.IntMap as IM
import qualified Data.Map.Strict as M
import Data.Word
import Foreign.Ptr (FunPtr, IntPtr (..), Ptr, ptrToIntPtr)
import Foreign.Storable (Storable, sizeOf)
import Hs.FFI
import Sys.DL
pI :: Ptr a -> Int
pI :: forall a. Ptr a -> Int
pI = (\(IntPtr Int
i) -> Int
i) (IntPtr -> Int) -> (Ptr a -> IntPtr) -> Ptr a -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr a -> IntPtr
forall a. Ptr a -> IntPtr
ptrToIntPtr
prepAddrs :: [X86 reg freg f2reg a] -> IO (Maybe CCtx)
prepAddrs :: forall reg freg f2reg a. [X86 reg freg f2reg a] -> IO (Maybe CCtx)
prepAddrs [X86 reg freg f2reg a]
ss = if [X86 reg freg f2reg a] -> Bool
forall reg freg f2reg a. [X86 reg freg f2reg a] -> Bool
hasMa [X86 reg freg f2reg a]
ss then CCtx -> Maybe CCtx
forall a. a -> Maybe a
Just (CCtx -> Maybe CCtx) -> IO CCtx -> IO (Maybe CCtx)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO CCtx
mem' else Maybe CCtx -> IO (Maybe CCtx)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe CCtx
forall a. Maybe a
Nothing
dbgFp :: (IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a]) -> IO [ByteString]
dbgFp (IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a])
asmϵ = do
(bs, _, ps) <- (IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a])
-> IO ([ByteString], FunPtr Any, Maybe (Ptr Word64))
forall a b.
(IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a])
-> IO ([ByteString], FunPtr b, Maybe (Ptr Word64))
allFp (IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a])
asmϵ
mFree ps $> bs
assembleCtx :: CCtx -> (IM.IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a]) -> IO (BS.ByteString, FunPtr b, Maybe (Ptr Word64))
assembleCtx :: forall a b.
CCtx
-> (IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a])
-> IO (ByteString, FunPtr b, Maybe (Ptr Word64))
assembleCtx CCtx
ctx (IntMap [Word64]
ds, [X86 X86Reg FX86Reg F2X86 a]
isns) = do
let (Int
sz, Map Label Int
lbls) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx Int
0 [X86 X86Reg FX86Reg F2X86 a]
isns
p <- if [X86 X86Reg FX86Reg F2X86 a] -> Bool
forall reg freg f2reg a. [X86 reg freg f2reg a] -> Bool
hasMa [X86 X86Reg FX86Reg F2X86 a]
isns then Int -> CSize -> IO (Ptr CChar)
forall a. Int -> CSize -> IO (Ptr a)
allocNear (CCtx -> Int
forall a b c d. (a, b, c, d) -> a
fst4 CCtx
ctx) (Int -> CSize
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
sz) else CSize -> IO (Ptr CChar)
forall a. CSize -> IO (Ptr a)
allocExec (Int -> CSize
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
sz)
arrs <- aArr ds
let b = [Word8] -> ByteString
BS.pack([Word8] -> ByteString)
-> ([[Word8]] -> [Word8]) -> [[Word8]] -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[[Word8]] -> [Word8]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat([[Word8]] -> ByteString) -> [[Word8]] -> ByteString
forall a b. (a -> b) -> a -> b
$Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
0 (Ptr CChar -> Int
forall a. Ptr a -> Int
pI Ptr CChar
p, IntMap (Ptr Word64)
arrs, CCtx -> Maybe CCtx
forall a. a -> Maybe a
Just CCtx
ctx, Map Label Int
lbls) [X86 X86Reg FX86Reg F2X86 a]
isns
mP = (Int, Ptr Word64) -> Ptr Word64
forall a b. (a, b) -> b
snd((Int, Ptr Word64) -> Ptr Word64)
-> Maybe (Int, Ptr Word64) -> Maybe (Ptr Word64)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>IntMap (Ptr Word64) -> Maybe (Int, Ptr Word64)
forall a. IntMap a -> Maybe (Int, a)
IM.lookupMin IntMap (Ptr Word64)
arrs
(b,,mP)<$>finish b p
allFp :: (IM.IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a]) -> IO ([BS.ByteString], FunPtr b, Maybe (Ptr Word64))
allFp :: forall a b.
(IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a])
-> IO ([ByteString], FunPtr b, Maybe (Ptr Word64))
allFp (IntMap [Word64]
ds, [X86 X86Reg FX86Reg F2X86 a]
instrs) = do
let (Int
sz, Map Label Int
lbls) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx Int
0 [X86 X86Reg FX86Reg F2X86 a]
instrs
(fn, p) <- do
res <- [X86 X86Reg FX86Reg F2X86 a] -> IO (Maybe CCtx)
forall reg freg f2reg a. [X86 reg freg f2reg a] -> IO (Maybe CCtx)
prepAddrs [X86 X86Reg FX86Reg F2X86 a]
instrs
case res of
Just (Int
m, Int
_, Int
_, Int
_) -> (Maybe CCtx
res,) (Ptr CChar -> (Maybe CCtx, Ptr CChar))
-> IO (Ptr CChar) -> IO (Maybe CCtx, Ptr CChar)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Int -> CSize -> IO (Ptr CChar)
forall a. Int -> CSize -> IO (Ptr a)
allocNear Int
m (Int -> CSize
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
sz)
Maybe CCtx
_ -> (Maybe CCtx
res,) (Ptr CChar -> (Maybe CCtx, Ptr CChar))
-> IO (Ptr CChar) -> IO (Maybe CCtx, Ptr CChar)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CSize -> IO (Ptr CChar)
forall a. CSize -> IO (Ptr a)
allocExec (Int -> CSize
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
sz)
arrs <- aArr ds
let is = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
0 (Ptr CChar -> Int
forall a. Ptr a -> Int
pI Ptr CChar
p, IntMap (Ptr Word64)
arrs, Maybe CCtx
fn, Map Label Int
lbls) [X86 X86Reg FX86Reg F2X86 a]
instrs; b = [Word8] -> ByteString
BS.pack([Word8] -> ByteString)
-> ([[Word8]] -> [Word8]) -> [[Word8]] -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[[Word8]] -> [Word8]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat([[Word8]] -> ByteString) -> [[Word8]] -> ByteString
forall a b. (a -> b) -> a -> b
$[[Word8]]
is; bs = [Word8] -> ByteString
BS.pack([Word8] -> ByteString) -> [[Word8]] -> [ByteString]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>[[Word8]]
is
mP = (Int, Ptr Word64) -> Ptr Word64
forall a b. (a, b) -> b
snd((Int, Ptr Word64) -> Ptr Word64)
-> Maybe (Int, Ptr Word64) -> Maybe (Ptr Word64)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>IntMap (Ptr Word64) -> Maybe (Int, Ptr Word64)
forall a. IntMap a -> Maybe (Int, a)
IM.lookupMin IntMap (Ptr Word64)
arrs
(bs,,mP)<$>finish b p
assemble :: (IM.IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a]) -> BS.ByteString
assemble :: forall a.
(IntMap [Word64], [X86 X86Reg FX86Reg F2X86 a]) -> ByteString
assemble (IntMap [Word64]
_, [X86 X86Reg FX86Reg F2X86 a]
instrs) =
let (Int
_, Map Label Int
lbls) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx Int
0 [X86 X86Reg FX86Reg F2X86 a]
instrs in
[Word8] -> ByteString
BS.pack([Word8] -> ByteString)
-> ([[Word8]] -> [Word8]) -> [[Word8]] -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
.[[Word8]] -> [Word8]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat([[Word8]] -> ByteString) -> [[Word8]] -> ByteString
forall a b. (a -> b) -> a -> b
$Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
0 ([Char] -> Int
forall a. HasCallStack => [Char] -> a
error [Char]
"Internal error: no self", [Char] -> IntMap (Ptr Word64)
forall a. HasCallStack => [Char] -> a
error [Char]
"Arrays not allowed :(", Maybe CCtx
forall a. Maybe a
Nothing, Map Label Int
lbls) [X86 X86Reg FX86Reg F2X86 a]
instrs
data VEXM = F | F38 | F3A
data PP = S6 | F3 | F2
rrNoPre :: RMB reg
=> [Word8]
-> reg
-> reg
-> [Word8]
rrNoPre :: forall reg. RMB reg => [Word8] -> reg -> reg -> [Word8]
rrNoPre [Word8]
opc reg
r0 reg
r1 =
let (Word8
_, Word8
b0) = reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM reg
r0
(Word8
_, Word8
b1) = reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM reg
r1
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0
in [Word8]
opc[Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++[Word8
modRMB]
mkRR :: [Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8]
opc = [Word8] -> Word8 -> reg0 -> reg1 -> [Word8]
forall reg0 reg1.
(RMB reg0, RMB reg1) =>
[Word8] -> Word8 -> reg0 -> reg1 -> [Word8]
mkAR [Word8]
opc Word8
3
mkAR :: (RMB reg0, RMB reg1)
=> [Word8]
-> Word8
-> reg0
-> reg1
-> [Word8]
mkAR :: forall reg0 reg1.
(RMB reg0, RMB reg1) =>
[Word8] -> Word8 -> reg0 -> reg1 -> [Word8]
mkAR [Word8]
opc Word8
m reg0
r0 reg1
r1 =
let (Word8
e0, Word8
b0) = reg0 -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM reg0
r0
(Word8
e1, Word8
b1) = reg1 -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM reg1
r1
prefix :: Word8
prefix = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
e1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0
modRMB :: Word8
modRMB = (Word8
m Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0
in Word8
prefixWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:[Word8]
opc[Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++[Word8
modRMB]
extSse :: Word8 -> Word8 -> FX86Reg -> FX86Reg -> [Word8]
extSse :: Word8 -> Word8 -> FX86Reg -> FX86Reg -> [Word8]
extSse Word8
pre Word8
opc FX86Reg
r0 FX86Reg
r1 =
let (Word8
e0, Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0
(Word8
e1, Word8
b1) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r1
b :: Word8
b = Word8
0x40 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
e1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0
in [Word8
pre,Word8
b,Word8
0xf,Word8
opc,Word8
modRMB]
vexV4 :: FX86Reg -> Word8
vexV4 :: FX86Reg -> Word8
vexV4 FX86Reg
XMM0 = Word8
0xf
vexV4 FX86Reg
XMM1 = Word8
0xe
vexV4 FX86Reg
XMM2 = Word8
0xd
vexV4 FX86Reg
XMM3 = Word8
0xc
vexV4 FX86Reg
XMM4 = Word8
0xb
vexV4 FX86Reg
XMM5 = Word8
0xa
vexV4 FX86Reg
XMM6 = Word8
0x9
vexV4 FX86Reg
XMM7 = Word8
0x8
vexV4 FX86Reg
XMM8 = Word8
0x7
vexV4 FX86Reg
XMM9 = Word8
0x6
vexV4 FX86Reg
XMM10 = Word8
0x5
vexV4 FX86Reg
XMM11 = Word8
0x4
vexV4 FX86Reg
XMM12 = Word8
0x3
vexV4 FX86Reg
XMM13 = Word8
0x2
vexV4 FX86Reg
XMM14 = Word8
0x1
vexV4 FX86Reg
XMM15 = Word8
0x0
bitC :: Word8 -> Word8
bitC :: Word8 -> Word8
bitC Word8
0x0 = Word8
0x1
bitC Word8
0x1 = Word8
0x0
bitsm :: VEXM -> Word8
bitsm :: VEXM -> Word8
bitsm VEXM
F = Word8
0x1
bitsm VEXM
F38 = Word8
0x2
bitsm VEXM
F3A = Word8
0x3
ppbits :: PP -> Word8
ppbits :: PP -> Word8
ppbits PP
S6 = Word8
0x1
ppbits PP
F3 = Word8
0x2
ppbits PP
F2 = Word8
0x3
mkVex :: Word8 -> PP -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex :: Word8 -> PP -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex Word8
opc PP
pp FX86Reg
r0 FX86Reg
r1 FX86Reg
r2 =
[Word8
0xc5,Word8
b,Word8
opc,Word8
modRMB]
where b :: Word8
b = (Word8 -> Word8
bitC Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
7) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (FX86Reg -> Word8
vexV4 FX86Reg
r1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. PP -> Word8
ppbits PP
pp
(Word8
e0, Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0
(Word8
_, Word8
b2) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r2
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b2
mkVex3 :: Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 :: Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
opc PP
pp VEXM
mm FX86Reg
r0 FX86Reg
r1 FX86Reg
r2 =
[Word8
0xc4,Word8
by0,Word8
by1,Word8
opc,Word8
modRMB]
where by0 :: Word8
by0 = (Word8 -> Word8
bitC Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
7) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8 -> Word8
bitC Word8
e2 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
5) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. VEXM -> Word8
bitsm VEXM
mm
by1 :: Word8
by1 = Word8
1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
7 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (FX86Reg -> Word8
vexV4 FX86Reg
r1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. PP -> Word8
ppbits PP
pp
(Word8
e0, Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0
(Word8
e2, Word8
b2) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r2
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b2
mkVexA :: Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> Addr X86Reg -> [Word8]
mkVexA :: Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> Addr X86Reg -> [Word8]
mkVexA Word8
opc PP
pp VEXM
mm FX86Reg
xr0 FX86Reg
xr1 (RSD X86Reg
b Scale
s X86Reg
i Int8
d)=
[Word8
0xc4,Word8
by0,Word8
by1,Word8
opc,Word8
modRMB,Word8
sib][Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
d
where by0 :: Word8
by0 = (Word8 -> Word8
bitC Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
7) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8 -> Word8
bitC Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8 -> Word8
bitC Word8
eb Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
5) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. VEXM -> Word8
bitsm VEXM
mm
by1 :: Word8
by1 = Word8
1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
7 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. FX86Reg -> Word8
vexV4 FX86Reg
xr1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. PP -> Word8
ppbits PP
pp
(Word8
e0, Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
xr0
(Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
b
(Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
i
modRMB :: Word8
modRMB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
mkVexA Word8
opc PP
pp VEXM
mm FX86Reg
xr0 FX86Reg
xr1 (RC b :: X86Reg
b@X86Reg
Rsp Int8
i) =
[Word8
0xc4,Word8
by0,Word8
by1,Word8
opc,Word8
modRMB,Word8
sib][Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i
where by0 :: Word8
by0 = Word8 -> Word8
bitC Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
7 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8 -> Word8
bitC Word8
eb Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8 -> Word8
bitC Word8
eb Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
5 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. VEXM -> Word8
bitsm VEXM
mm
by1 :: Word8
by1 = Word8
1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
7 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. FX86Reg -> Word8
vexV4 FX86Reg
xr1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. PP -> Word8
ppbits PP
pp
(Word8
e0,Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
xr0
(Word8
eb,Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
b
modRMB :: Word8
modRMB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
bb Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
mkIx :: Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, M.Map Label Int)
mkIx :: forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx Int
ix (Pop a
_ X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Push a
_ X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Label a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) = (Map Label Int -> Map Label Int)
-> (Int, Map Label Int) -> (Int, Map Label Int)
forall b c a. (b -> c) -> (a, b) -> (a, c)
forall (p :: * -> * -> *) b c a.
Bifunctor p =>
(b -> c) -> p a b -> p a c
second (Label -> Int -> Map Label Int -> Map Label Int
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert Label
l Int
ix) ((Int, Map Label Int) -> (Int, Map Label Int))
-> (Int, Map Label Int) -> (Int, Map Label Int)
forall a b. (a -> b) -> a -> b
$ Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx Int
ix [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRR{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Movapd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (IAddRR{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (And{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (ISubRR{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Addsd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Mulsd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Divsd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vsubsd a
_ FX86Reg
_ FX86Reg
_ FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vaddsd a
_ FX86Reg
_ FX86Reg
_ FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vdivsd a
_ FX86Reg
_ FX86Reg
_ FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vmulsd a
_ FX86Reg
_ FX86Reg
_ FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vmaxsd a
_ FX86Reg
_ FX86Reg
_ FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (VaddsdA{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (VmaxsdA{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vcmppd a
_ FX86Reg
_ FX86Reg
_ FX86Reg
r Pred
_ :[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vfmadd231sd{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vfmnadd231sd{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vfmadd213sd{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vfmsub213sd{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vfmsub231sd{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vfmsub132sd{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Vfmadd231sdA{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (CmpRR{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (IMulRR{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (IMulRA{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (XorRR{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXR{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqRX{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (TestI{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix ((CmpRI a
_ X86Reg
_ Int32
i):[X86 X86Reg FX86Reg F2X86 a]
asms) | Just{} <- Int64 -> Maybe Int8
mi64i8 (Int32 -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int32
i) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix ((IAddRI a
_ X86Reg
_ Int64
i):[X86 X86Reg FX86Reg F2X86 a]
asms) | Just{} <- Int64 -> Maybe Int8
mi64i8 Int64
i = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix ((IAddRI a
_ X86Reg
_ Int64
i):[X86 X86Reg FX86Reg F2X86 a]
asms) | Just{} <- Int64 -> Maybe Int32
mi64i32 Int64
i = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix ((ISubRI a
_ X86Reg
_ Int64
i):[X86 X86Reg FX86Reg F2X86 a]
asms) | Just{} <- Int64 -> Maybe Int8
mi64i8 Int64
i = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Just{} <- Int64 -> Maybe Int32
mi64i32 Int64
i = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRI a
_ X86Reg
r Int64
i:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just{} <- Int64 -> Maybe Int32
mi64i32 Int64
i, Int64
i Int64 -> Int64 -> Bool
forall a. Ord a => a -> a -> Bool
>= Int64
0 Bool -> Bool -> Bool
&& X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRI{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
10) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRL{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
10) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Roundsd a
_ FX86Reg
r0 FX86Reg
r1 RoundMode
_:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Roundsd{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Cvttsd2si{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Cvtsi2sd{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Ret{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (RetL{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Je{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Jne{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Jg{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Jge{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Jl{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Jle{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (J{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (C{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqAX a
_ (R X86Reg
Rsp) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqAX a
_ (R X86Reg
rb) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
rb Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqAX a
_ (RC X86Reg
Rsp Int8
_) FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqAX a
_ (RC X86Reg
R12 Int8
_) FX86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqAX a
_ (RC X86Reg
rb Int8
_) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
rb Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqAX a
_ (RSD X86Reg
b Scale
_ X86Reg
i Int8
_) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r Bool -> Bool -> Bool
&& X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
b Bool -> Bool -> Bool
&& X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
i = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqAX a
_ RSD{} FX86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
_ (R X86Reg
R13):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
r0 (R X86Reg
Rsp):[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
r0 (R X86Reg
r1):[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
r1 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
_ (RS X86Reg
R13 Scale
_ X86Reg
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
_ RSD{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
_ RS{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
r0 (RC X86Reg
Rsp Int8
_):[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
xr (RC X86Reg
r Int8
_):[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
xr Bool -> Bool -> Bool
&& X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
r = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
_ (RC X86Reg
R12 Int8
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovqXA a
_ FX86Reg
_ RC{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fldl2e{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fldln2{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fld1{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fsin{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fcos{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (FldS{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fld a
_ (RC X86Reg
Rsp Int8
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fyl2x{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fmulp{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (F2xm1{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fprem{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Faddp{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fscale{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fxch{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fstp a
_ (RC X86Reg
Rsp Int8
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Sal{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Sar{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Call{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAI32 a
_ (R X86Reg
Rsp) Int32
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAI32 a
_ (R X86Reg
Rbp) Int32
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAI32 a
_ (R X86Reg
R13) Int32
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAI32 a
_ (R X86Reg
R12) Int32
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAI32 a
_ R{} Int32
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAI32 a
_ RC{} Int32
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ (RC X86Reg
Rsp Int8
_) X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ (RC X86Reg
R12 Int8
_) X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ RC{} X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ (RC32 X86Reg
Rsp Int32
_) X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ RC32{} X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ RSD{} X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ RS{} X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ (R X86Reg
Rsp) X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ (R X86Reg
Rbp) X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ (R X86Reg
R13) X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovAR a
_ R{} X86Reg
_:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ (RS X86Reg
Rbp Scale
_ X86Reg
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ (RS X86Reg
R13 Scale
_ X86Reg
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ RS{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ RSD{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ (R X86Reg
Rsp):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ (R X86Reg
Rbp):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ (R X86Reg
R13):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ R{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ (RC X86Reg
Rsp Int8
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ (RC X86Reg
R12 Int8
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ RC{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ (RC32 X86Reg
Rsp Int32
_):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (MovRA a
_ X86Reg
_ RC32{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Sqrtsd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Not{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Rdrand{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Cmovnle{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Cmovnl{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Cmovne{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Cmove{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Cmovl{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Cmovle{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Fninit{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (IDiv{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix (Neg{}:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
forall a.
Int -> [X86 X86Reg FX86Reg F2X86 a] -> (Int, Map Label Int)
mkIx (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) [X86 X86Reg FX86Reg F2X86 a]
asms
mkIx Int
ix [] = (Int
ix, Map Label Int
forall k a. Map k a
M.empty)
mkIx Int
_ (X86 X86Reg FX86Reg F2X86 a
instr:[X86 X86Reg FX86Reg F2X86 a]
_) = [Char] -> (Int, Map Label Int)
forall a. HasCallStack => [Char] -> a
error (X86 X86Reg FX86Reg F2X86 a -> [Char]
forall a. Show a => a -> [Char]
show X86 X86Reg FX86Reg F2X86 a
instr)
fits :: RMB reg => reg -> Bool
fits :: forall reg. RMB reg => reg -> Bool
fits reg
r = let (Word8
e, Word8
_) = reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM reg
r in Word8
e Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
0
asm :: Int -> (Int, IM.IntMap (Ptr Word64), Maybe CCtx, M.Map Label Int) -> [X86 X86Reg FX86Reg F2X86 a] -> [[Word8]]
asm :: forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
_ (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
_ [] = []
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Push a
_ X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
r =
let (Word8
_, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
isn :: Word8
isn = Word8
0x50 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0
in [Word8
isn][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
let (Word8
_, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
instr :: [Word8]
instr = [Word8
0x41, Word8
0x50 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0]
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Pop a
_ X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
b0) <- X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r=
let isn :: Word8
isn = Word8
0x58 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0
in [Word8
isn][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
let (Word8
_, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
instr :: [Word8]
instr = [Word8
0x41, Word8
0x58 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0]
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Label{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRR a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x89] X86Reg
r0 X86Reg
r1[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r0 (RC r1 :: X86Reg
r1@X86Reg
Rsp Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r0
(Word8
0, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
pref :: Word8
pref = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
sib :: Word8
sib = Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
opc :: Word8
opc=Word8
0x8b; instr :: [Word8]
instr = Word8
prefWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
opcWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r0 (RC r1 :: X86Reg
r1@X86Reg
R12 Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r0
(Word8
e1, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
pref :: Word8
pref = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e1
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
sib :: Word8
sib = Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
opc :: Word8
opc=Word8
0x8b; instr :: [Word8]
instr = Word8
prefWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
opcWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r0 (RC32 r1 :: X86Reg
r1@X86Reg
Rsp Int32
i32):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r0
(Word8
0, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
pref :: Word8
pref = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2
modB :: Word8
modB = Word8
0x2 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
sib :: Word8
sib = Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
opc :: Word8
opc=Word8
0x8b; instr :: [Word8]
instr = Word8
prefWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
opcWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r0 (RC X86Reg
r1 Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r0
(Word8
e1, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
pref :: Word8
pref = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e1
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
opc :: Word8
opc=Word8
0x8b; instr :: [Word8]
instr = Word8
prefWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
opcWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r0 (RC32 X86Reg
r1 Int32
i32):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r0
(Word8
e1, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
pref :: Word8
pref = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e1
modB :: Word8
modB = Word8
0x2 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
opc :: Word8
opc=Word8
0x8b; instr :: [Word8]
instr = Word8
prefWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
opcWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r0 (RC r1 :: X86Reg
r1@X86Reg
Rsp Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 =
let (Word8
_, Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0
(Word8
_, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
instr :: [Word8]
instr = Word8
0xf3Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xfWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x7eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
l FX86Reg
r0 (R X86Reg
R13):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> FX86Reg -> Addr X86Reg -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> freg -> Addr reg -> X86 reg freg f2 a
MovqXA a
l FX86Reg
r0 (X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Int8 -> Addr reg
RC X86Reg
R13 Int8
0)X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r0 (R r1 :: X86Reg
r1@X86Reg
Rsp):[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
b0) <- FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0 =
let (Word8
0, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
modB :: Word8
modB = Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
sib :: Word8
sib = Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
isn :: [Word8]
isn = [Word8
0xf3,Word8
0x0f,Word8
0x7e,Word8
modB,Word8
sib]
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r0 (R X86Reg
r1):[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
b0) <- FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0, (Word8
0, Word8
b1) <- X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1 =
let modB :: Word8
modB = Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
instr :: [Word8]
instr = [Word8
0xf3, Word8
0x0f, Word8
0x7e, Word8
modB]
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r0 (RC X86Reg
r1 Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
b0) <- FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0, (Word8
0, Word8
b1) <- X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1 =
let modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
instr :: [Word8]
instr = Word8
0xf3Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x7eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r (RC rb :: X86Reg
rb@X86Reg
R12 Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r
(Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
0x4 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
isn :: [Word8]
isn = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xfWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x6eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r (RC rb :: X86Reg
rb@X86Reg
Rsp Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r
(Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
0x4 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
isn :: [Word8]
isn = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xfWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x6eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r0 (RC X86Reg
r1 Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0
(Word8
e1, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e1
instr :: [Word8]
instr = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xfWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x6eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r0 (R r1 :: X86Reg
r1@X86Reg
Rsp):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0
(Word8
0, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
modB :: Word8
modB = Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2
sib :: Word8
sib = Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
instr :: [Word8]
instr = [Word8
0x66, Word8
pre, Word8
0xf, Word8
0x6e, Word8
modB, Word8
sib]
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r0 (R X86Reg
r1):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r0
(Word8
e1, Word8
b1) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r1
modB :: Word8
modB = Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e1
instr :: [Word8]
instr = [Word8
0x66, Word8
pre, Word8
0xf, Word8
0x6e, Word8
modB]
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (RC r0 :: X86Reg
r0@X86Reg
Rsp Int8
i8) FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
b1) <- FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r1 =
let (Word8
0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r0
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0
instr :: [Word8]
instr = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xd6Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (R rb :: X86Reg
rb@X86Reg
Rsp) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
b) <- FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r =
let (Word8
0, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb
modB :: Word8
modB = Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
bb Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
isn :: [Word8]
isn = [Word8
0x66,Word8
0x0f,Word8
0xd6,Word8
modB,Word8
sib]
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (R X86Reg
rb) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
bb) <- X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb, (Word8
0, Word8
b) <- FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r =
let modB :: Word8
modB = Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
isn :: [Word8]
isn = [Word8
0x66,Word8
0x0f,Word8
0xd6,Word8
modB]
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (R X86Reg
rb) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb; (Word8
e, Word8
b) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
modB :: Word8
modB = Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
isn :: [Word8]
isn = [Word8
0x66,Word8
pre,Word8
0x0f,Word8
0xd6,Word8
modB]
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (RC X86Reg
rb Int8
i8) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
bb) <- X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb, (Word8
0, Word8
b) <- FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r =
let modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
isn :: [Word8]
isn = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xd6Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (RC rb :: X86Reg
rb@X86Reg
R12 Int8
i8) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb
(Word8
e, Word8
b) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
sib :: Word8
sib = Word8
0x4 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
isn :: [Word8]
isn = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xd6Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (RC X86Reg
rb Int8
i8) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb
(Word8
e, Word8
b) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
isn :: [Word8]
isn = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xd6Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (RSD X86Reg
rb Scale
s X86Reg
ri Int8
d) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) | (Word8
0, Word8
b) <- FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r, (Word8
0, Word8
bi) <- X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
ri, (Word8
0, Word8
bb) <- X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb =
let modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
instr :: [Word8]
instr = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xd6Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
d
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqAX a
_ (RSD X86Reg
rb Scale
s X86Reg
ri Int8
d) FX86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r; (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb; (Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
ri
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
rex :: Word8
rex = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
1 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
instr :: [Word8]
instr = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
rexWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x7eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
d
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
l FX86Reg
r (RS X86Reg
R13 Scale
s X86Reg
ri):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> FX86Reg -> Addr X86Reg -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> freg -> Addr reg -> X86 reg freg f2 a
MovqXA a
l FX86Reg
r (X86Reg -> Scale -> X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Scale -> reg -> Int8 -> Addr reg
RSD X86Reg
R13 Scale
s X86Reg
ri Int8
0)X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r (RS X86Reg
rb Scale
s X86Reg
ri):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r; (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb; (Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
ri
modB :: Word8
modB = Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
rex :: Word8
rex = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
1 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
instr :: [Word8]
instr = [Word8
0x66,Word8
rex,Word8
0x0f,Word8
0x6e,Word8
modB,Word8
sib]
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXA a
_ FX86Reg
r (RSD X86Reg
rb Scale
s X86Reg
ri Int8
d):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = FX86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM FX86Reg
r; (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb; (Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
ri
modB :: Word8
modB = Word8
1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
rex :: Word8
rex = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
1 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
instr :: [Word8]
instr = Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
rexWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x6eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
d
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Movapd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 =
[Word8] -> FX86Reg -> FX86Reg -> [Word8]
forall reg. RMB reg => [Word8] -> reg -> reg -> [Word8]
rrNoPre [Word8
0x66,Word8
0x0f,Word8
0x28] FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> Word8 -> FX86Reg -> FX86Reg -> [Word8]
extSse Word8
0x66 Word8
0x28 FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (IAddRR a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x01] X86Reg
r0 X86Reg
r1[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (And a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x21] X86Reg
r0 X86Reg
r1[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (ISubRR a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x29] X86Reg
r0 X86Reg
r1[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (IDiv a
_ X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
modB :: Word8
modB = Word8
3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
7 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
isn :: [Word8]
isn = [Word8
pre,Word8
0xf7,Word8
modB]
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Addsd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 =
[Word8] -> FX86Reg -> FX86Reg -> [Word8]
forall reg. RMB reg => [Word8] -> reg -> reg -> [Word8]
rrNoPre [Word8
0xf2,Word8
0x0f,Word8
0x58] FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> Word8 -> FX86Reg -> FX86Reg -> [Word8]
extSse Word8
0xf2 Word8
0x58 FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Mulsd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 =
[Word8] -> FX86Reg -> FX86Reg -> [Word8]
forall reg. RMB reg => [Word8] -> reg -> reg -> [Word8]
rrNoPre [Word8
0xf2,Word8
0x0f,Word8
0x59] FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> Word8 -> FX86Reg -> FX86Reg -> [Word8]
extSse Word8
0xf2 Word8
0x59 FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Divsd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 =
[Word8] -> FX86Reg -> FX86Reg -> [Word8]
forall reg. RMB reg => [Word8] -> reg -> reg -> [Word8]
rrNoPre [Word8
0xf2,Word8
0x0f,Word8
0x5e] FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> Word8 -> FX86Reg -> FX86Reg -> [Word8]
extSse Word8
0xf2 Word8
0x5e FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vsubsd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r2 =
Word8 -> PP -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex Word8
0x5c PP
F2 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0x5c PP
F2 VEXM
F FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vaddsd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r2 =
Word8 -> PP -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex Word8
0x58 PP
F2 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0x58 PP
F2 VEXM
F FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vdivsd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r2 =
Word8 -> PP -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex Word8
0x5e PP
F2 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0x5e PP
F2 VEXM
F FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vmulsd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r2 =
Word8 -> PP -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex Word8
0x59 PP
F2 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0x59 PP
F2 VEXM
F FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vmaxsd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r2 =
Word8 -> PP -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex Word8
0x5f PP
F2 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0x5f PP
F2 VEXM
F FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (VaddsdA a
_ FX86Reg
r0 FX86Reg
r1 Addr X86Reg
a:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> Addr X86Reg -> [Word8]
mkVexA Word8
0x58 PP
F2 VEXM
F FX86Reg
r0 FX86Reg
r1 Addr X86Reg
a[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (VmaxsdA a
_ FX86Reg
r0 FX86Reg
r1 Addr X86Reg
a:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> Addr X86Reg -> [Word8]
mkVexA Word8
0x5f PP
F2 VEXM
F FX86Reg
r0 FX86Reg
r1 Addr X86Reg
a[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vcmppd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2 Pred
p:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r2 =
(Word8 -> PP -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex Word8
0xc2 PP
S6 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2 [Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++ Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le (Pred -> Int8
imm8 Pred
p))[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
(Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0xc2 PP
S6 VEXM
F FX86Reg
r0 FX86Reg
r1 FX86Reg
r2 [Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++ Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le (Pred -> Int8
imm8 Pred
p))[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vfmadd231sd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0xb9 PP
S6 VEXM
F38 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vfmnadd231sd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0xbd PP
S6 VEXM
F38 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vfmadd213sd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0xa9 PP
S6 VEXM
F38 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vfmsub132sd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0x9b PP
S6 VEXM
F38 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vfmsub213sd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0xab PP
S6 VEXM
F38 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vfmsub231sd a
_ FX86Reg
r0 FX86Reg
r1 FX86Reg
r2:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> FX86Reg -> [Word8]
mkVex3 Word8
0xbb PP
S6 VEXM
F38 FX86Reg
r0 FX86Reg
r1 FX86Reg
r2[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Vfmadd231sdA a
_ FX86Reg
r0 FX86Reg
r1 Addr X86Reg
a:[X86 X86Reg FX86Reg F2X86 a]
asms) =
Word8 -> PP -> VEXM -> FX86Reg -> FX86Reg -> Addr X86Reg -> [Word8]
mkVexA Word8
0xb9 PP
S6 VEXM
F38 FX86Reg
r0 FX86Reg
r1 Addr X86Reg
a[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Roundsd a
_ FX86Reg
r0 FX86Reg
r1 RoundMode
i:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 =
([Word8] -> FX86Reg -> FX86Reg -> [Word8]
forall reg. RMB reg => [Word8] -> reg -> reg -> [Word8]
rrNoPre [Word8
0x66,Word8
0x0f,Word8
0x3a,Word8
0x0b] FX86Reg
r1 FX86Reg
r0[Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++Word8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le (RoundMode -> Word8
roundMode RoundMode
i))[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Roundsd a
_ FX86Reg
r0 FX86Reg
r1 RoundMode
i:[X86 X86Reg FX86Reg F2X86 a]
asms) =
(Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:[Word8] -> Word8 -> FX86Reg -> FX86Reg -> [Word8]
forall reg0 reg1.
(RMB reg0, RMB reg1) =>
[Word8] -> Word8 -> reg0 -> reg1 -> [Word8]
mkAR [Word8
0xf,Word8
0x3a,Word8
0xb] Word8
0 FX86Reg
r1 FX86Reg
r0[Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++Word8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le (RoundMode -> Word8
roundMode RoundMode
i))[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Cvttsd2si a
_ X86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
(Word8
0xf2Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:[Word8] -> FX86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x0f,Word8
0x2c] FX86Reg
r1 X86Reg
r0)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Cvtsi2sd a
_ FX86Reg
fr X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
(Word8
0xf2Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:[Word8] -> X86Reg -> FX86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x0f,Word8
0x2a] X86Reg
r FX86Reg
fr)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Sqrtsd a
_ FX86Reg
r0 FX86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) | FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r0 Bool -> Bool -> Bool
&& FX86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits FX86Reg
r1 =
[Word8] -> FX86Reg -> FX86Reg -> [Word8]
forall reg. RMB reg => [Word8] -> reg -> reg -> [Word8]
rrNoPre [Word8
0xf2,Word8
0x0f,Word8
0x51] FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise =
Word8 -> Word8 -> FX86Reg -> FX86Reg -> [Word8]
extSse Word8
0xf2 Word8
0x51 FX86Reg
r1 FX86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (CmpRR a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x39] X86Reg
r0 X86Reg
r1[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqXR a
_ FX86Reg
fr X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
(Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:[Word8] -> X86Reg -> FX86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x0f,Word8
0x6e] X86Reg
r FX86Reg
fr)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovqRX a
_ X86Reg
r FX86Reg
fr:[X86 X86Reg FX86Reg F2X86 a]
asms) =
(Word8
0x66Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:[Word8] -> X86Reg -> FX86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x0f,Word8
0x7e] X86Reg
r FX86Reg
fr)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (IMulRR a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x0f, Word8
0xaf] X86Reg
r1 X86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (IMulRA a
_ X86Reg
r (RSD X86Reg
rb Scale
s X86Reg
ri Int8
d):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
(Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb
(Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
ri
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
1 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
in (Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xafWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
d)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (XorRR a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0x31] X86Reg
r0 X86Reg
r1[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (TestI a
_ X86Reg
r Int32
i:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
prefix :: Word8
prefix = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modB :: Word8
modB = Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in (Word8
prefixWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xf7Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (CmpRI a
_ X86Reg
r Int32
i:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int8
i8 <- Int64 -> Maybe Int8
mi64i8 (Int32 -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int32
i) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
prefix :: Word8
prefix = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
0o7 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in (Word8
prefixWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x83Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (CmpRI a
_ X86Reg
r Int32
i32:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
prefix :: Word8
prefix = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
0o7 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in (Word8
prefixWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x81Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (IAddRI a
_ X86Reg
r Int64
i:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int8
i8 <- Int64 -> Maybe Int8
mi64i8 Int64
i =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
prefix :: Word8
prefix = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in (Word8
prefixWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x83Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (IAddRI a
_ X86Reg
r Int64
i:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int32
i32 <- Int64 -> Maybe Int32
mi64i32 Int64
i =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
prefix :: Word8
prefix = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in (Word8
prefixWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x81Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (ISubRI a
_ X86Reg
r Int64
i:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int8
i8 <- Int64 -> Maybe Int8
mi64i8 Int64
i =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
prefix :: Word8
prefix = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
0x5 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in (Word8
prefixWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x83Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (ISubRI a
_ X86Reg
r Int64
i:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int32
i32 <- Int64 -> Maybe Int32
mi64i32 Int64
i =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
prefix :: Word8
prefix = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
0x5 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in (Word8
prefixWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x81Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
| Bool
otherwise = [Char] -> [[Word8]]
forall a. HasCallStack => [Char] -> a
error [Char]
"Not implemented yet: handling 64-bit immediates"
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRI a
_ X86Reg
r Int64
i:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int32
i32 <- Int64 -> Maybe Int32
mi64i32 Int64
i, Int64
i Int64 -> Int64 -> Bool
forall a. Ord a => a -> a -> Bool
>= Int64
0 Bool -> Bool -> Bool
&& X86Reg -> Bool
forall reg. RMB reg => reg -> Bool
fits X86Reg
r =
let (Word8
_, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
opc :: Word8
opc = Word8
0xb8 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in (Word8
opcWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd Int32
i32)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRI a
_ X86Reg
r Int64
i:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
pre :: [Word8] -> [Word8]
pre = (Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:) ([Word8] -> [Word8]) -> ([Word8] -> [Word8]) -> [Word8] -> [Word8]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Word8
0xB8 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:)
in [Word8] -> [Word8]
pre (Int64 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int64
i)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
10) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRL a
x X86Reg
r Int
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let p :: Ptr Word64
p=Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> Ptr Word64
arr Int
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
in Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> X86Reg -> Int64 -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> reg -> Int64 -> X86 reg freg f2 a
MovRI a
x X86Reg
r (Int -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral(Int -> Int64) -> Int -> Int64
forall a b. (a -> b) -> a -> b
$Ptr Word64 -> Int
forall a. Ptr a -> Int
pI Ptr Word64
p)X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Ret{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xc3][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (RetL{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xc3][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
1) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Je a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let lIx :: Int
lIx = Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
instr :: [Word8]
instr = let offs :: Int
offs = Int
lIxInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
6 in Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x84Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
offs :: Int32)
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Jne a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let lIx :: Int
lIx = Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
instr :: [Word8]
instr = let offs :: Int
offs = Int
lIxInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
6 in Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x85Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
offs :: Int32)
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Jg a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let lIx :: Int
lIx = Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
instr :: [Word8]
instr = let offs :: Int
offs = Int
lIxInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
6 in Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x8fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
offs :: Int32)
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Jge a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let lIx :: Int
lIx = Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
instr :: [Word8]
instr = let offs :: Int
offs = Int
lIxInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
6 in Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x8dWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
offs :: Int32)
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Jl a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let lIx :: Int
lIx = Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
instr :: [Word8]
instr = let offs :: Int
offs = Int
lIxInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
6 in Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x8cWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
offs :: Int32)
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Jle a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let lIx :: Int
lIx = Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
instr :: [Word8]
instr = let offs :: Int
offs = Int
lIxInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
6 in Word8
0x0fWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x8eWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
offs :: Int32)
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
6) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (J a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let lIx :: Int
lIx = Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
instr :: [Word8]
instr = let offs :: Int
offs = Int
lIxInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
5 in Word8
0xe9Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
offs :: Int32)
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (C a
_ Label
l:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let lIx :: Int
lIx = Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st
instr :: [Word8]
instr = let offs :: Int
offs = Int
lIxInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
5 in Word8
0xe8Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. Integral a => a -> [Word8]
cd (Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
offs :: Int32)
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fmulp{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xde,Word8
0xc9][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (F2xm1{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xf0][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fldl2e{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xea][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fldln2{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xed][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fld1{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xe8][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fsin{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xfe][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fcos{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xff][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (FldS a
_ (ST Int8
i):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let isn :: [Word8]
isn = [Word8
0xd9, Word8
0xc0Word8 -> Word8 -> Word8
forall a. Num a => a -> a -> a
+Int8 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int8
i] in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fprem{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xf8][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Faddp{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xde,Word8
0xc1][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fscale{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xfd][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fninit{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xdb,Word8
0xe3][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fxch a
_ (ST Int8
i):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let isn :: [Word8]
isn = [Word8
0xd9, Word8
0xc9Word8 -> Word8 -> Word8
forall a. Num a => a -> a -> a
+Int8 -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int8
i] in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fyl2x{}:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8
0xd9,Word8
0xf1][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
2) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fld a
_ (RC r :: X86Reg
r@X86Reg
Rsp Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
_, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
instr :: [Word8]
instr = Word8
0xddWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Fstp a
_ (RC r :: X86Reg
r@X86Reg
Rsp Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
_, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
instr :: [Word8]
instr = Word8
0xddWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Sal a
_ X86Reg
r Int8
i:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
0x4 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
instr :: [Word8]
instr = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xc1Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Sar a
_ X86Reg
r Int8
i:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
modRMB :: Word8
modRMB = (Word8
0x3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. (Word8
0x7 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3) Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
instr :: [Word8]
instr = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xc1Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAI32 a
l (R X86Reg
R13) Int32
i32:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> Addr X86Reg -> Int32 -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> Addr reg -> Int32 -> X86 reg freg f2 a
MovAI32 a
l (X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Int8 -> Addr reg
RC X86Reg
R13 Int8
0) Int32
i32X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAI32 a
l (R X86Reg
Rbp) Int32
i32:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> Addr X86Reg -> Int32 -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> Addr reg -> Int32 -> X86 reg freg f2 a
MovAI32 a
l (X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Int8 -> Addr reg
RC X86Reg
Rbp Int8
0) Int32
i32X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAI32 a
_ (R X86Reg
Rsp) Int32
i32:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
0, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
Rsp
modB :: Word8
modB = Word8
0x4
sib :: Word8
sib = Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
instr :: [Word8]
instr = Word8
0x48Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xc7Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAI32 a
_ (R X86Reg
R12) Int32
i32:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
R12
modB :: Word8
modB = Word8
0x4
sib :: Word8
sib = Word8
0x4 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
isn :: [Word8]
isn = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xc7Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAI32 a
_ (R X86Reg
r) Int32
i32:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
modRMB :: Word8
modRMB = Word8
b
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
instr :: [Word8]
instr = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xc7Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAI32 a
_ (RC X86Reg
r Int8
i8) Int32
i32:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
isn :: [Word8]
isn = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0xc7Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8 [Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++ Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (RC X86Reg
Rsp Int8
i8) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
(Word8
0, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
Rsp
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi
instr :: [Word8]
instr = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x89Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (RC32 X86Reg
Rsp Int32
i32) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
(Word8
0, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
Rsp
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2
modB :: Word8
modB = Word8
0x2 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi
instr :: [Word8]
instr = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x89Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
8) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (RC X86Reg
R12 Int8
i8) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
(Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
R12
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei
modB :: Word8
modB = Word8
0x1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
0x4
sib :: Word8
sib = Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi
instr :: [Word8]
instr = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x89Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (RC X86Reg
ar Int8
i8) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
([Word8] -> Word8 -> X86Reg -> X86Reg -> [Word8]
forall reg0 reg1.
(RMB reg0, RMB reg1) =>
[Word8] -> Word8 -> reg0 -> reg1 -> [Word8]
mkAR [Word8
0x89] Word8
1 X86Reg
ar X86Reg
r[Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (RC32 X86Reg
ar Int32
i32) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
([Word8] -> Word8 -> X86Reg -> X86Reg -> [Word8]
forall reg0 reg1.
(RMB reg0, RMB reg1) =>
[Word8] -> Word8 -> reg0 -> reg1 -> [Word8]
mkAR [Word8
0x89] Word8
2 X86Reg
ar X86Reg
r[Word8] -> [Word8] -> [Word8]
forall a. [a] -> [a] -> [a]
++Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32)[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
7) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
l X86Reg
r (RS b :: X86Reg
b@X86Reg
Rbp Scale
s X86Reg
i):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> X86Reg -> Addr X86Reg -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
MovRA a
l X86Reg
r (X86Reg -> Scale -> X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Scale -> reg -> Int8 -> Addr reg
RSD X86Reg
b Scale
s X86Reg
i Int8
0)X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
l X86Reg
r (RS b :: X86Reg
b@X86Reg
R13 Scale
s X86Reg
i):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> X86Reg -> Addr X86Reg -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
MovRA a
l X86Reg
r (X86Reg -> Scale -> X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Scale -> reg -> Int8 -> Addr reg
RSD X86Reg
b Scale
s X86Reg
i Int8
0)X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r (RS X86Reg
b Scale
s X86Reg
i):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
(Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
b
(Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
i
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
1 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
modB :: Word8
modB = Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
instr :: [Word8]
instr = [Word8
pre,Word8
0x8b,Word8
modB,Word8
sib]
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (RSD X86Reg
b Scale
s X86Reg
i Int8
i8) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
b
(Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
i
(Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
1 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
modRMB :: Word8
modRMB = Word8
1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
instr :: [Word8]
instr = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x89Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r (RSD X86Reg
b Scale
s X86Reg
i Int8
i8):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
b
(Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
i
(Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
1 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
modRMB :: Word8
modRMB = Word8
1 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
instr :: [Word8]
instr = Word8
preWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
0x8bWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
modRMBWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Word8
sibWord8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int8 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int8
i8
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
l (R X86Reg
Rbp) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> Addr X86Reg -> X86Reg -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> Addr reg -> reg -> X86 reg freg f2 a
MovAR a
l (X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Int8 -> Addr reg
RC X86Reg
Rbp Int8
0) X86Reg
rX86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
l (R X86Reg
R13) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> Addr X86Reg -> X86Reg -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> Addr reg -> reg -> X86 reg freg f2 a
MovAR a
l (X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Int8 -> Addr reg
RC X86Reg
R13 Int8
0) X86Reg
rX86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (R ar :: X86Reg
ar@X86Reg
Rsp) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
0, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
ar
(Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2
modRMB :: Word8
modRMB = Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4; sib :: Word8
sib = Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi
isn :: [Word8]
isn = [Word8
pre,Word8
0x89,Word8
modRMB,Word8
sib]
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r (R ar :: X86Reg
ar@X86Reg
Rsp):[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
0, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
ar
(Word8
e0, Word8
b0) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2
modRMB :: Word8
modRMB = Word8
b0 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4; sib :: Word8
sib = Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi
isn :: [Word8]
isn = [Word8
pre,Word8
0x8b,Word8
modRMB,Word8
sib]
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (R X86Reg
ar) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> Word8 -> X86Reg -> X86Reg -> [Word8]
forall reg0 reg1.
(RMB reg0, RMB reg1) =>
[Word8] -> Word8 -> reg0 -> reg1 -> [Word8]
mkAR [Word8
0x89] Word8
0 X86Reg
ar X86Reg
r[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
l X86Reg
r (R X86Reg
Rbp):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> X86Reg -> Addr X86Reg -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
MovRA a
l X86Reg
r (X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Int8 -> Addr reg
RC X86Reg
Rbp Int8
0)X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
l X86Reg
r (R X86Reg
R13):[X86 X86Reg FX86Reg F2X86 a]
asms) = Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (a -> X86Reg -> Addr X86Reg -> X86 X86Reg FX86Reg F2X86 a
forall reg freg f2 a. a -> reg -> Addr reg -> X86 reg freg f2 a
MovRA a
l X86Reg
r (X86Reg -> Int8 -> Addr X86Reg
forall reg. reg -> Int8 -> Addr reg
RC X86Reg
R13 Int8
0)X86 X86Reg FX86Reg F2X86 a
-> [X86 X86Reg FX86Reg F2X86 a] -> [X86 X86Reg FX86Reg F2X86 a]
forall a. a -> [a] -> [a]
:[X86 X86Reg FX86Reg F2X86 a]
asms)
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovRA a
_ X86Reg
r (R X86Reg
ar):[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> Word8 -> X86Reg -> X86Reg -> [Word8]
forall reg0 reg1.
(RMB reg0, RMB reg1) =>
[Word8] -> Word8 -> reg0 -> reg1 -> [Word8]
mkAR [Word8
0x8b] Word8
0 X86Reg
ar X86Reg
r[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Cmovne a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0xf,Word8
0x45] X86Reg
r1 X86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Cmovnle a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0xf,Word8
0x4f] X86Reg
r1 X86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Cmovnl a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0xf,Word8
0x4d] X86Reg
r1 X86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Cmovle a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0xf,Word8
0x4e] X86Reg
r1 X86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Cmovl a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0xf,Word8
0x4c] X86Reg
r1 X86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Cmove a
_ X86Reg
r0 X86Reg
r1:[X86 X86Reg FX86Reg F2X86 a]
asms) =
[Word8] -> X86Reg -> X86Reg -> [Word8]
forall {reg0} {reg1}.
(RMB reg0, RMB reg1) =>
[Word8] -> reg0 -> reg1 -> [Word8]
mkRR [Word8
0xf,Word8
0x44] X86Reg
r1 X86Reg
r0[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (MovAR a
_ (RS X86Reg
rb Scale
s X86Reg
ri) X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
eb, Word8
bb) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
rb
(Word8
ei, Word8
bi) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
ri
(Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
modRMB :: Word8
modRMB = Word8
b Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
4
sib :: Word8
sib = Scale -> Word8
encS Scale
s Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bi Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
bb
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
2 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
ei Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
1 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
eb
in [Word8
pre,Word8
0x89,Word8
modRMB,Word8
sib][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Not a
_ X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modB :: Word8
modB = Word8
3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
2 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in [Word8
pre,Word8
0xf7,Word8
modB][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Neg a
_ X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modB :: Word8
modB = Word8
3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in [Word8
pre,Word8
0xf7,Word8
modB][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm(Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
3) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st (Rdrand a
_ X86Reg
r:[X86 X86Reg FX86Reg F2X86 a]
asms) =
let (Word8
e, Word8
b) = X86Reg -> (Word8, Word8)
forall a. RMB a => a -> (Word8, Word8)
modRM X86Reg
r
pre :: Word8
pre = Word8
0x48 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
e
modB :: Word8
modB = Word8
3 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
6 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
6 Word8 -> Int -> Word8
forall a. Bits a => a -> Int -> a
`shiftL` Int
3 Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.|. Word8
b
in [Word8
pre,Word8
0xf,Word8
0xc7,Word8
modB][Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm(Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
4) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix st :: (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st@(Int
self, IntMap (Ptr Word64)
_, Just (Int
m, Int
_, Int
_, Int
_), Map Label Int
_) (Call a
_ CFunc
Malloc:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int32
i32 <- Int -> Maybe Int32
mi32 (Int
mInt -> Int -> Int
forall a. Num a => a -> a -> a
-(Int
selfInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5)) =
let instr :: [Word8]
instr = Word8
0xe8Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix st :: (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st@(Int
self, IntMap (Ptr Word64)
_, Just (Int
_, Int
f, Int
_, Int
_), Map Label Int
_) (Call a
_ CFunc
Free:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int32
i32 <- Int -> Maybe Int32
mi32 (Int
fInt -> Int -> Int
forall a. Num a => a -> a -> a
-(Int
selfInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5)) =
let instr :: [Word8]
instr = Word8
0xe8Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
instr[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
ix st :: (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st@(Int
self, IntMap (Ptr Word64)
_, Just (Int
_, Int
_, Int
d, Int
_), Map Label Int
_) (Call a
_ CFunc
DR:[X86 X86Reg FX86Reg F2X86 a]
asms) | Just Int32
i32 <- Int -> Maybe Int32
mi32 (Int
dInt -> Int -> Int
forall a. Num a => a -> a -> a
-(Int
selfInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5)) =
let isn :: [Word8]
isn=Word8
0xe8Word8 -> [Word8] -> [Word8]
forall a. a -> [a] -> [a]
:Int32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le Int32
i32
in [Word8]
isn[Word8] -> [[Word8]] -> [[Word8]]
forall a. a -> [a] -> [a]
:Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
forall a.
Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> [X86 X86Reg FX86Reg F2X86 a]
-> [[Word8]]
asm (Int
ixInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
5) (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
st [X86 X86Reg FX86Reg F2X86 a]
asms
asm Int
_ (Int
_, IntMap (Ptr Word64)
_, Maybe CCtx
Nothing, Map Label Int
_) (Call{}:[X86 X86Reg FX86Reg F2X86 a]
_) = [Char] -> [[Word8]]
forall a. HasCallStack => [Char] -> a
error [Char]
"Internal error? no dynlibs"
asm Int
_ (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
_ (X86 X86Reg FX86Reg F2X86 a
instr:[X86 X86Reg FX86Reg F2X86 a]
_) = [Char] -> [[Word8]]
forall a. HasCallStack => [Char] -> a
error (X86 X86Reg FX86Reg F2X86 a -> [Char]
forall a. Show a => a -> [Char]
show X86 X86Reg FX86Reg F2X86 a
instr)
encS :: Scale -> Word8
encS :: Scale -> Word8
encS Scale
One = Word8
0
encS Scale
Two = Word8
1
encS Scale
Four = Word8
2
encS Scale
Eight = Word8
3
get :: Label -> (Int, IM.IntMap (Ptr Word64), Maybe CCtx, M.Map Label Int) -> Int
get :: Label
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int) -> Int
get Label
l =
Int -> Label -> Map Label Int -> Int
forall k a. Ord k => a -> k -> Map k a -> a
M.findWithDefault ([Char] -> Int
forall a. HasCallStack => [Char] -> a
error [Char]
"Internal error: label not found") Label
l (Map Label Int -> Int)
-> ((Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> Map Label Int)
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> Map Label Int
forall {a} {b} {c} {d}. (a, b, c, d) -> d
fth where fth :: (a, b, c, d) -> d
fth (a
_,b
_,c
_,d
z) = d
z
arr :: Int -> (Int, IM.IntMap (Ptr Word64), Maybe CCtx, M.Map Label Int) -> Ptr Word64
arr :: Int
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> Ptr Word64
arr Int
n = Ptr Word64 -> Int -> IntMap (Ptr Word64) -> Ptr Word64
forall a. a -> Int -> IntMap a -> a
IM.findWithDefault ([Char] -> Ptr Word64
forall a. HasCallStack => [Char] -> a
error [Char]
"Internal error: array not found during assembler stage") Int
n (IntMap (Ptr Word64) -> Ptr Word64)
-> ((Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> IntMap (Ptr Word64))
-> (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> Ptr Word64
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int, IntMap (Ptr Word64), Maybe CCtx, Map Label Int)
-> IntMap (Ptr Word64)
forall {a} {b} {c} {d}. (a, b, c, d) -> b
snd4 where snd4 :: (a, b, c, d) -> b
snd4 (a
_,b
y,c
_,d
_) = b
y
mi64i8 :: Int64 -> Maybe Int8
mi64i8 :: Int64 -> Maybe Int8
mi64i8 Int64
i | Int64
i Int64 -> Int64 -> Bool
forall a. Ord a => a -> a -> Bool
> Int8 -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int8
forall a. Bounded a => a
maxBound :: Int8) Bool -> Bool -> Bool
|| Int64
i Int64 -> Int64 -> Bool
forall a. Ord a => a -> a -> Bool
< Int8 -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int8
forall a. Bounded a => a
minBound :: Int8) = Maybe Int8
forall a. Maybe a
Nothing
| Bool
otherwise = Int8 -> Maybe Int8
forall a. a -> Maybe a
Just (Int8 -> Maybe Int8) -> Int8 -> Maybe Int8
forall a b. (a -> b) -> a -> b
$ Int64 -> Int8
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
i
mi32 :: Int -> Maybe Int32
mi32 :: Int -> Maybe Int32
mi32 Int
i | Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int32
forall a. Bounded a => a
maxBound :: Int32) Bool -> Bool -> Bool
|| Int
i Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int32 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int32
forall a. Bounded a => a
minBound :: Int32) = Maybe Int32
forall a. Maybe a
Nothing
| Bool
otherwise = Int32 -> Maybe Int32
forall a. a -> Maybe a
Just (Int32 -> Maybe Int32) -> Int32 -> Maybe Int32
forall a b. (a -> b) -> a -> b
$ Int -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
i
mi64i32 :: Int64 -> Maybe Int32
mi64i32 :: Int64 -> Maybe Int32
mi64i32 Int64
i | Int64
i Int64 -> Int64 -> Bool
forall a. Ord a => a -> a -> Bool
> Int32 -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int32
forall a. Bounded a => a
maxBound :: Int32) Bool -> Bool -> Bool
|| Int64
i Int64 -> Int64 -> Bool
forall a. Ord a => a -> a -> Bool
< Int32 -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int32
forall a. Bounded a => a
minBound :: Int32) = Maybe Int32
forall a. Maybe a
Nothing
| Bool
otherwise = Int32 -> Maybe Int32
forall a. a -> Maybe a
Just (Int32 -> Maybe Int32) -> Int32 -> Maybe Int32
forall a b. (a -> b) -> a -> b
$ Int64 -> Int32
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
i
class RMB a where
modRM :: a -> (Word8, Word8)
instance RMB X86Reg where
modRM :: X86Reg -> (Word8, Word8)
modRM X86Reg
Rax = (Word8
0, Word8
0o0)
modRM X86Reg
Rcx = (Word8
0, Word8
0o1)
modRM X86Reg
Rdx = (Word8
0, Word8
0o2)
modRM X86Reg
Rbx = (Word8
0, Word8
0o3)
modRM X86Reg
Rsp = (Word8
0, Word8
0o4)
modRM X86Reg
Rbp = (Word8
0, Word8
0o5)
modRM X86Reg
Rsi = (Word8
0, Word8
0o6)
modRM X86Reg
Rdi = (Word8
0, Word8
0o7)
modRM X86Reg
R8 = (Word8
1, Word8
0o0)
modRM X86Reg
R9 = (Word8
1, Word8
0o1)
modRM X86Reg
R10 = (Word8
1, Word8
0o2)
modRM X86Reg
R11 = (Word8
1, Word8
0o3)
modRM X86Reg
R12 = (Word8
1, Word8
0o4)
modRM X86Reg
R13 = (Word8
1, Word8
0o5)
modRM X86Reg
R14 = (Word8
1, Word8
0o6)
modRM X86Reg
R15 = (Word8
1, Word8
0o7)
instance RMB FX86Reg where
modRM :: FX86Reg -> (Word8, Word8)
modRM FX86Reg
XMM0 = (Word8
0, Word8
0o0)
modRM FX86Reg
XMM1 = (Word8
0, Word8
0o1)
modRM FX86Reg
XMM2 = (Word8
0, Word8
0o2)
modRM FX86Reg
XMM3 = (Word8
0, Word8
0o3)
modRM FX86Reg
XMM4 = (Word8
0, Word8
0o4)
modRM FX86Reg
XMM5 = (Word8
0, Word8
0o5)
modRM FX86Reg
XMM6 = (Word8
0, Word8
0o6)
modRM FX86Reg
XMM7 = (Word8
0, Word8
0o7)
modRM FX86Reg
XMM8 = (Word8
1, Word8
0o0)
modRM FX86Reg
XMM9 = (Word8
1, Word8
0o1)
modRM FX86Reg
XMM10 = (Word8
1, Word8
0o2)
modRM FX86Reg
XMM11 = (Word8
1, Word8
0o3)
modRM FX86Reg
XMM12 = (Word8
1, Word8
0o4)
modRM FX86Reg
XMM13 = (Word8
1, Word8
0o5)
modRM FX86Reg
XMM14 = (Word8
1, Word8
0o6)
modRM FX86Reg
XMM15 = (Word8
1, Word8
0o7)
cd :: (Integral a) => a -> [Word8]
cd :: forall a. Integral a => a -> [Word8]
cd a
x = Word32 -> [Word8]
forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le (a -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x :: Word32)
le :: (Storable a, Integral a, Bits a) => a -> [Word8]
le :: forall a. (Storable a, Integral a, Bits a) => a -> [Word8]
le a
x = a -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Word8) -> [a] -> [Word8]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (a -> Int -> a) -> [a] -> [Int] -> [a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\a
m Int
e -> (a
x a -> a -> a
forall a. Bits a => a -> a -> a
.&. a
m) a -> Int -> a
forall a. Bits a => a -> Int -> a
`rotateR` Int
e) [a]
masks [Int]
ee
where ee :: [Int]
ee = [Int
0,Int
8..(Int
8Int -> Int -> Int
forall a. Num a => a -> a -> a
*(a -> Int
forall a. Storable a => a -> Int
sizeOf a
xInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1))]
masks :: [a]
masks = (a -> a) -> a -> [a]
forall a. (a -> a) -> a -> [a]
iterate (a -> a -> a
forall a. Num a => a -> a -> a
*a
0x100) a
0xff
fst4 :: (a, b, c, d) -> a
fst4 :: forall a b c d. (a, b, c, d) -> a
fst4 (a
x, b
_, c
_, d
_) = a
x