Safe Haskell | None |
---|---|
Language | Haskell2010 |
- newtype Bytes = Bytes {}
- class HasBytes a where
- data Size
- class HasSize a where
- class IsSize s
- base :: Operand s RW -> Addr s
- disp :: Int32 -> Addr s
- index1 :: Operand s RW -> Addr s
- index2 :: Operand s RW -> Addr s
- index4 :: Operand s RW -> Addr s
- index8 :: Operand s RW -> Addr s
- data Access
- data Operand :: Size -> Access -> *
- resizeOperand :: IsSize s' => Operand s RW -> Operand s' RW
- imm :: Integral a => a -> Operand s R
- addr :: IsSize s' => Addr s' -> Operand s rw
- ipBase :: Operand s rw
- rax :: Operand S64 rw
- rcx :: Operand S64 rw
- rdx :: Operand S64 rw
- rbx :: Operand S64 rw
- rsp :: Operand S64 rw
- rbp :: Operand S64 rw
- rsi :: Operand S64 rw
- rdi :: Operand S64 rw
- r8 :: Operand S64 rw
- r9 :: Operand S64 rw
- r10 :: Operand S64 rw
- r11 :: Operand S64 rw
- r12 :: Operand S64 rw
- r13 :: Operand S64 rw
- r14 :: Operand S64 rw
- r15 :: Operand S64 rw
- eax :: Operand S32 rw
- ecx :: Operand S32 rw
- edx :: Operand S32 rw
- ebx :: Operand S32 rw
- esp :: Operand S32 rw
- ebp :: Operand S32 rw
- esi :: Operand S32 rw
- edi :: Operand S32 rw
- r8d :: Operand S32 rw
- r9d :: Operand S32 rw
- r10d :: Operand S32 rw
- r11d :: Operand S32 rw
- r12d :: Operand S32 rw
- r13d :: Operand S32 rw
- r14d :: Operand S32 rw
- r15d :: Operand S32 rw
- ax :: Operand S16 rw
- cx :: Operand S16 rw
- dx :: Operand S16 rw
- bx :: Operand S16 rw
- sp :: Operand S16 rw
- bp :: Operand S16 rw
- si :: Operand S16 rw
- di :: Operand S16 rw
- r8w :: Operand S16 rw
- r9w :: Operand S16 rw
- r10w :: Operand S16 rw
- r11w :: Operand S16 rw
- r12w :: Operand S16 rw
- r13w :: Operand S16 rw
- r14w :: Operand S16 rw
- r15w :: Operand S16 rw
- al :: Operand S8 rw
- cl :: Operand S8 rw
- dl :: Operand S8 rw
- bl :: Operand S8 rw
- spl :: Operand S8 rw
- bpl :: Operand S8 rw
- sil :: Operand S8 rw
- dil :: Operand S8 rw
- r8b :: Operand S8 rw
- r9b :: Operand S8 rw
- r10b :: Operand S8 rw
- r11b :: Operand S8 rw
- r12b :: Operand S8 rw
- r13b :: Operand S8 rw
- r14b :: Operand S8 rw
- r15b :: Operand S8 rw
- ah :: Operand S8 rw
- ch :: Operand S8 rw
- dh :: Operand S8 rw
- bh :: Operand S8 rw
- data Condition
- pattern O :: Condition
- pattern NO :: Condition
- pattern C :: Condition
- pattern NC :: Condition
- pattern Z :: Condition
- pattern NZ :: Condition
- pattern BE :: Condition
- pattern NBE :: Condition
- pattern S :: Condition
- pattern NS :: Condition
- pattern P :: Condition
- pattern NP :: Condition
- pattern L :: Condition
- pattern NL :: Condition
- pattern LE :: Condition
- pattern NLE :: Condition
- data Code where
- Ret, Nop, PushF, PopF, Cmc, Clc, Stc, Cli, Sti, Cld, Std :: Code
- Inc, Dec, Not, Neg :: IsSize s => Operand s RW -> Code
- Add, Or, Adc, Sbb, And, Sub, Xor, Cmp, Test, Mov :: IsSize s => Operand s RW -> Operand s r -> Code
- Rol, Ror, Rcl, Rcr, Shl, Shr, Sar :: IsSize s => Operand s RW -> Operand S8 r -> Code
- Xchg :: IsSize s => Operand s RW -> Operand s RW -> Code
- Lea :: (IsSize s, IsSize s') => Operand s RW -> Operand s' RW -> Code
- Pop :: Operand S64 RW -> Code
- Push :: Operand S64 r -> Code
- Call :: Operand S64 RW -> Code
- Jmpq :: Operand S64 RW -> Code
- J :: Maybe Size -> Condition -> Code
- Jmp :: Code
- Label :: Code
- Scope :: Code -> Code
- Up :: Code -> Code
- Data :: Bytes -> Code
- Align :: Size -> Code
- EmptyCode :: Code
- AppendCode :: Code -> Code -> Code
- (<>) :: Monoid m => m -> m -> m
- (<.>) :: Code -> Code -> Code
- (<:>) :: Code -> Code -> Code
- j :: Condition -> Code -> Code
- j_back :: Code -> Condition -> Code
- if_ :: Condition -> Code -> Code -> Code
- lea8 :: IsSize s => Operand s RW -> Operand S8 RW -> Code
- leaData :: (HasBytes a, IsSize s) => Operand s RW -> a -> Code
- class Callable a
- compile :: Callable a => Code -> a
- callFun :: Operand S64 RW -> FunPtr a -> Code
- saveNonVolatile :: Code -> Code
- arg1 :: Operand S64 rw
- arg2 :: Operand S64 rw
- arg3 :: Operand S64 rw
- arg4 :: Operand S64 rw
- result :: Operand S64 rw
- class CallableHs a
- hsPtr :: CallableHs a => a -> FunPtr a
- runTests :: IO ()
- newtype CString = CString String
- traceReg :: IsSize s => String -> Operand s RW -> Code
- printf :: FunPtr a
Byte sequences
Sizes (in bits)
ssize
Addresses
Operands
Immediate values
Memory references
Registers
64 bit registers
32 bit registers
16 bit registers
8 bit low registers
8 bit high registers
Conditions
Assembly codes
Ret, Nop, PushF, PopF, Cmc, Clc, Stc, Cli, Sti, Cld, Std :: Code | |
Inc, Dec, Not, Neg :: IsSize s => Operand s RW -> Code | |
Add, Or, Adc, Sbb, And, Sub, Xor, Cmp, Test, Mov :: IsSize s => Operand s RW -> Operand s r -> Code | |
Rol, Ror, Rcl, Rcr, Shl, Shr, Sar :: IsSize s => Operand s RW -> Operand S8 r -> Code | |
Xchg :: IsSize s => Operand s RW -> Operand s RW -> Code | |
Lea :: (IsSize s, IsSize s') => Operand s RW -> Operand s' RW -> Code | |
Pop :: Operand S64 RW -> Code | |
Push :: Operand S64 r -> Code | |
Call :: Operand S64 RW -> Code | |
Jmpq :: Operand S64 RW -> Code | |
J :: Maybe Size -> Condition -> Code | |
Jmp :: Code | |
Label :: Code | |
Scope :: Code -> Code | |
Up :: Code -> Code | |
Data :: Bytes -> Code | |
Align :: Size -> Code | |
EmptyCode :: Code | |
AppendCode :: Code -> Code -> Code |
Compound assembly codes
j :: Condition -> Code -> Code Source #
short conditional forward jump (no auto size available for forward jumps)
Compilation
unsafeCallForeignPtr
Calling C and Haskell from Assembly
saveNonVolatile :: Code -> Code Source #
Save the non-volatile registers
Note: R12..R15 should be preserved on both Windows and Linux. This is the responsability of the user (this won't save them).
hsPtr :: CallableHs a => a -> FunPtr a Source #