packages feed

harpy 0.4.3.0 → 0.5.0.0

raw patch · 5 files changed

+49/−37 lines, 5 filesdep ~disassemblerdep ~mtldep ~parsecPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: disassembler, mtl, parsec

API changes (from Hackage documentation)

- Harpy.Call: conv[a9D8] :: FunPtr () -> IO ()
- Harpy.Call: conv[a9E4] :: FunPtr (Word32 -> Word32) -> Word32 -> IO Word32
- Harpy.Call: conv[a9IR] :: FunPtr (Ptr a[a9IK] -> Ptr b[a9IL] -> Ptr c[a9IM] -> Ptr d[a9IN] -> Ptr e[a9IO] -> Ptr f[a9IP] -> Ptr g[a9IQ] -> ()) -> Ptr a[a9IK] -> Ptr b[a9IL] -> Ptr c[a9IM] -> Ptr d[a9IN] -> Ptr e[a9IO] -> Ptr f[a9IP] -> Ptr g[a9IQ] -> IO ()
- Harpy.X86Assembler: ah :: Reg8
- Harpy.X86Assembler: al :: Reg8
- Harpy.X86Assembler: ax :: Reg16
- Harpy.X86Assembler: bh :: Reg8
- Harpy.X86Assembler: bl :: Reg8
- Harpy.X86Assembler: bp :: Reg16
- Harpy.X86Assembler: bx :: Reg16
- Harpy.X86Assembler: ch :: Reg8
- Harpy.X86Assembler: cl :: Reg8
- Harpy.X86Assembler: cx :: Reg16
- Harpy.X86Assembler: dh :: Reg8
- Harpy.X86Assembler: di :: Reg16
- Harpy.X86Assembler: dl :: Reg8
- Harpy.X86Assembler: dx :: Reg16
- Harpy.X86Assembler: eax :: Reg32
- Harpy.X86Assembler: ebp :: Reg32
- Harpy.X86Assembler: ebx :: Reg32
- Harpy.X86Assembler: ecx :: Reg32
- Harpy.X86Assembler: edi :: Reg32
- Harpy.X86Assembler: edx :: Reg32
- Harpy.X86Assembler: esi :: Reg32
- Harpy.X86Assembler: esp :: Reg32
- Harpy.X86Assembler: si :: Reg16
- Harpy.X86Assembler: sp :: Reg16
- Harpy.X86Assembler: xmm0 :: XMMReg
- Harpy.X86Assembler: xmm1 :: XMMReg
- Harpy.X86Assembler: xmm2 :: XMMReg
- Harpy.X86Assembler: xmm3 :: XMMReg
- Harpy.X86Assembler: xmm4 :: XMMReg
- Harpy.X86Assembler: xmm5 :: XMMReg
- Harpy.X86Assembler: xmm6 :: XMMReg
- Harpy.X86Assembler: xmm7 :: XMMReg
- Harpy.X86CodeGen: x86_adc :: Word8
- Harpy.X86CodeGen: x86_add :: Word8
- Harpy.X86CodeGen: x86_address_prefix :: Word8
- Harpy.X86CodeGen: x86_and :: Word8
- Harpy.X86CodeGen: x86_breakpoint :: CodeGen s e ()
- Harpy.X86CodeGen: x86_cc_a :: Int
- Harpy.X86CodeGen: x86_cc_ae :: Int
- Harpy.X86CodeGen: x86_cc_b :: Int
- Harpy.X86CodeGen: x86_cc_be :: Int
- Harpy.X86CodeGen: x86_cc_c :: Int
- Harpy.X86CodeGen: x86_cc_e :: Int
- Harpy.X86CodeGen: x86_cc_eq :: Int
- Harpy.X86CodeGen: x86_cc_ge :: Int
- Harpy.X86CodeGen: x86_cc_gez :: Int
- Harpy.X86CodeGen: x86_cc_le :: Int
- Harpy.X86CodeGen: x86_cc_lt :: Int
- Harpy.X86CodeGen: x86_cc_lz :: Int
- Harpy.X86CodeGen: x86_cc_na :: Int
- Harpy.X86CodeGen: x86_cc_nae :: Int
- Harpy.X86CodeGen: x86_cc_nb :: Int
- Harpy.X86CodeGen: x86_cc_nbe :: Int
- Harpy.X86CodeGen: x86_cc_nc :: Int
- Harpy.X86CodeGen: x86_cc_ne :: Int
- Harpy.X86CodeGen: x86_cc_no :: Int
- Harpy.X86CodeGen: x86_cc_np :: Int
- Harpy.X86CodeGen: x86_cc_ns :: Int
- Harpy.X86CodeGen: x86_cc_nz :: Int
- Harpy.X86CodeGen: x86_cc_o :: Int
- Harpy.X86CodeGen: x86_cc_p :: Int
- Harpy.X86CodeGen: x86_cc_pe :: Int
- Harpy.X86CodeGen: x86_cc_po :: Int
- Harpy.X86CodeGen: x86_cc_s :: Int
- Harpy.X86CodeGen: x86_cc_z :: Int
- Harpy.X86CodeGen: x86_cdq :: CodeGen s e ()
- Harpy.X86CodeGen: x86_cld :: CodeGen s e ()
- Harpy.X86CodeGen: x86_cmp :: Word8
- Harpy.X86CodeGen: x86_cs_prefix :: Word8
- Harpy.X86CodeGen: x86_ds_prefix :: Word8
- Harpy.X86CodeGen: x86_dword_size :: Int
- Harpy.X86CodeGen: x86_eax :: Word8
- Harpy.X86CodeGen: x86_eax_mask :: Int
- Harpy.X86CodeGen: x86_ebp :: Word8
- Harpy.X86CodeGen: x86_ebp_mask :: Int
- Harpy.X86CodeGen: x86_ebx :: Word8
- Harpy.X86CodeGen: x86_ebx_mask :: Int
- Harpy.X86CodeGen: x86_ecx :: Word8
- Harpy.X86CodeGen: x86_ecx_mask :: Int
- Harpy.X86CodeGen: x86_edi :: Word8
- Harpy.X86CodeGen: x86_edi_mask :: Int
- Harpy.X86CodeGen: x86_edx :: Word8
- Harpy.X86CodeGen: x86_edx_mask :: Int
- Harpy.X86CodeGen: x86_es_prefix :: Word8
- Harpy.X86CodeGen: x86_esi :: Word8
- Harpy.X86CodeGen: x86_esi_mask :: Int
- Harpy.X86CodeGen: x86_esp :: Word8
- Harpy.X86CodeGen: x86_fabs :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fadd :: Word8
- Harpy.X86CodeGen: x86_fcom :: Word8
- Harpy.X86CodeGen: x86_fcomp :: Word8
- Harpy.X86CodeGen: x86_fcos :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fdiv :: Word8
- Harpy.X86CodeGen: x86_fdivr :: Word8
- Harpy.X86CodeGen: x86_fmul :: Word8
- Harpy.X86CodeGen: x86_fp_c0 :: Word32
- Harpy.X86CodeGen: x86_fp_c1 :: Word32
- Harpy.X86CodeGen: x86_fp_c2 :: Word32
- Harpy.X86CodeGen: x86_fp_c3 :: Word32
- Harpy.X86CodeGen: x86_fp_cc_mask :: Word32
- Harpy.X86CodeGen: x86_fpatan :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fpcw_denopex_mask :: Word32
- Harpy.X86CodeGen: x86_fpcw_invopex_mask :: Word32
- Harpy.X86CodeGen: x86_fpcw_ovfex_mask :: Word32
- Harpy.X86CodeGen: x86_fpcw_prec_double :: Word32
- Harpy.X86CodeGen: x86_fpcw_prec_extended :: Word32
- Harpy.X86CodeGen: x86_fpcw_prec_single :: Word32
- Harpy.X86CodeGen: x86_fpcw_precc_mask :: Word32
- Harpy.X86CodeGen: x86_fpcw_precex_mask :: Word32
- Harpy.X86CodeGen: x86_fpcw_round_down :: Word32
- Harpy.X86CodeGen: x86_fpcw_round_nearest :: Word32
- Harpy.X86CodeGen: x86_fpcw_round_tozero :: Word32
- Harpy.X86CodeGen: x86_fpcw_round_up :: Word32
- Harpy.X86CodeGen: x86_fpcw_roundc_mask :: Word32
- Harpy.X86CodeGen: x86_fpcw_undfex_mask :: Word32
- Harpy.X86CodeGen: x86_fpcw_zerodiv_mask :: Word32
- Harpy.X86CodeGen: x86_fprem :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fprem1 :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fptan :: CodeGen s e ()
- Harpy.X86CodeGen: x86_frndint :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fs_prefix :: Word8
- Harpy.X86CodeGen: x86_fsin :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fsqrt :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fsub :: Word8
- Harpy.X86CodeGen: x86_fsubr :: Word8
- Harpy.X86CodeGen: x86_ftst :: CodeGen s e ()
- Harpy.X86CodeGen: x86_fxam :: CodeGen s e ()
- Harpy.X86CodeGen: x86_gs_prefix :: Word8
- Harpy.X86CodeGen: x86_likely_prefix :: Word8
- Harpy.X86CodeGen: x86_lock_prefix :: Word8
- Harpy.X86CodeGen: x86_movsb :: CodeGen s e ()
- Harpy.X86CodeGen: x86_movsd :: CodeGen s e ()
- Harpy.X86CodeGen: x86_movsl :: CodeGen s e ()
- Harpy.X86CodeGen: x86_operand_prefix :: Word8
- Harpy.X86CodeGen: x86_or :: Word8
- Harpy.X86CodeGen: x86_qword_size :: Int
- Harpy.X86CodeGen: x86_rcl :: Word8
- Harpy.X86CodeGen: x86_rcr :: Word8
- Harpy.X86CodeGen: x86_rep_prefix :: Word8
- Harpy.X86CodeGen: x86_repnz_prefix :: Word8
- Harpy.X86CodeGen: x86_repz_prefix :: Word8
- Harpy.X86CodeGen: x86_rol :: Word8
- Harpy.X86CodeGen: x86_ror :: Word8
- Harpy.X86CodeGen: x86_sar :: Word8
- Harpy.X86CodeGen: x86_sbb :: Word8
- Harpy.X86CodeGen: x86_shl :: Word8
- Harpy.X86CodeGen: x86_shld :: Word8
- Harpy.X86CodeGen: x86_shlr :: Word8
- Harpy.X86CodeGen: x86_shr :: Word8
- Harpy.X86CodeGen: x86_ss_prefix :: Word8
- Harpy.X86CodeGen: x86_sse_pd :: X86_SSE_PFX
- Harpy.X86CodeGen: x86_sse_ps :: X86_SSE_PFX
- Harpy.X86CodeGen: x86_sse_sd :: X86_SSE_PFX
- Harpy.X86CodeGen: x86_sse_ss :: X86_SSE_PFX
- Harpy.X86CodeGen: x86_stosb :: CodeGen s e ()
- Harpy.X86CodeGen: x86_stosd :: CodeGen s e ()
- Harpy.X86CodeGen: x86_stosl :: CodeGen s e ()
- Harpy.X86CodeGen: x86_sub :: Word8
- Harpy.X86CodeGen: x86_unlikely_prefix :: Word8
- Harpy.X86CodeGen: x86_wait :: CodeGen s e ()
- Harpy.X86CodeGen: x86_xor :: Word8
+ Harpy.Call: callAsVoid :: CodeGen e t ()
+ Harpy.Call: conv :: FunPtr () -> IO ()
+ Harpy.X86Assembler: al, bh, dh, ch, ah, bl, dl, cl :: Reg8
+ Harpy.X86Assembler: ax, di, si, bp, sp, bx, dx, cx :: Reg16
+ Harpy.X86Assembler: breakpoint :: CodeGen e s ()
+ Harpy.X86Assembler: cdq :: CodeGen e s ()
+ Harpy.X86Assembler: cld :: CodeGen e s ()
+ Harpy.X86Assembler: eax, edi, esi, ebp, esp, ebx, edx, ecx :: Reg32
+ Harpy.X86Assembler: fabs :: CodeGen e s ()
+ Harpy.X86Assembler: fchs :: CodeGen e s ()
+ Harpy.X86Assembler: fcomi :: FPReg -> CodeGen e s ()
+ Harpy.X86Assembler: fcomip :: FPReg -> CodeGen e s ()
+ Harpy.X86Assembler: fcompp :: CodeGen e s ()
+ Harpy.X86Assembler: fcos :: CodeGen e s ()
+ Harpy.X86Assembler: fld1 :: CodeGen e s ()
+ Harpy.X86Assembler: fldpi :: CodeGen e s ()
+ Harpy.X86Assembler: fldz :: CodeGen e s ()
+ Harpy.X86Assembler: fnstsw :: CodeGen e s ()
+ Harpy.X86Assembler: fp0 :: FPReg
+ Harpy.X86Assembler: fp1 :: FPReg
+ Harpy.X86Assembler: fp2 :: FPReg
+ Harpy.X86Assembler: fp3 :: FPReg
+ Harpy.X86Assembler: fp4 :: FPReg
+ Harpy.X86Assembler: fp5 :: FPReg
+ Harpy.X86Assembler: fp6 :: FPReg
+ Harpy.X86Assembler: fp7 :: FPReg
+ Harpy.X86Assembler: fpTop :: FPTopReg
+ Harpy.X86Assembler: fpatan :: CodeGen e s ()
+ Harpy.X86Assembler: fprem :: CodeGen e s ()
+ Harpy.X86Assembler: fprem1 :: CodeGen e s ()
+ Harpy.X86Assembler: fptan :: CodeGen e s ()
+ Harpy.X86Assembler: frem :: CodeGen e s ()
+ Harpy.X86Assembler: frndint :: CodeGen e s ()
+ Harpy.X86Assembler: fsin :: CodeGen e s ()
+ Harpy.X86Assembler: fsqrt :: CodeGen e s ()
+ Harpy.X86Assembler: fstsw :: CodeGen e s ()
+ Harpy.X86Assembler: ftst :: CodeGen e s ()
+ Harpy.X86Assembler: fucomi :: FPReg -> CodeGen e s ()
+ Harpy.X86Assembler: fucomip :: FPReg -> CodeGen e s ()
+ Harpy.X86Assembler: fucompp :: CodeGen e s ()
+ Harpy.X86Assembler: fxam :: CodeGen e s ()
+ Harpy.X86Assembler: fxch :: FPReg -> CodeGen e s ()
+ Harpy.X86Assembler: movsb :: CodeGen e s ()
+ Harpy.X86Assembler: movsl :: CodeGen e s ()
+ Harpy.X86Assembler: nop :: CodeGen e s ()
+ Harpy.X86Assembler: onlyCl :: CodeGen e s a
+ Harpy.X86Assembler: onlyEbp :: CodeGen e s a
+ Harpy.X86Assembler: popad :: CodeGen e s ()
+ Harpy.X86Assembler: popfd :: CodeGen e s ()
+ Harpy.X86Assembler: pushad :: CodeGen e s ()
+ Harpy.X86Assembler: pushfd :: CodeGen e s ()
+ Harpy.X86Assembler: rdtsc :: CodeGen e s ()
+ Harpy.X86Assembler: stosb :: CodeGen e s ()
+ Harpy.X86Assembler: stosd :: CodeGen e s ()
+ Harpy.X86Assembler: stosl :: CodeGen e s ()
+ Harpy.X86Assembler: wait :: CodeGen e s ()
+ Harpy.X86Assembler: xmm0, xmm7, xmm6, xmm5, xmm4, xmm3, xmm2, xmm1 :: XMMReg
+ Harpy.X86CodeGen: x86_breakpoint, x86_movsd, x86_movsl, x86_movsb, x86_stosd, x86_stosl, x86_stosb, x86_cld :: CodeGen s e ()
+ Harpy.X86CodeGen: x86_cc_a, x86_cc_nc, x86_cc_nb, x86_cc_ae, x86_cc_ge, x86_cc_nbe :: Int
+ Harpy.X86CodeGen: x86_cc_b, x86_cc_na, x86_cc_be, x86_cc_le, x86_cc_nae, x86_cc_c :: Int
+ Harpy.X86CodeGen: x86_cc_lz, x86_cc_pe, x86_cc_p, x86_cc_ns, x86_cc_gez, x86_cc_s :: Int
+ Harpy.X86CodeGen: x86_cc_no, x86_cc_lt, x86_cc_nz, x86_cc_ne, x86_cc_z, x86_cc_e, x86_cc_eq :: Int
+ Harpy.X86CodeGen: x86_cc_np, x86_cc_o, x86_cc_po :: Int
+ Harpy.X86CodeGen: x86_cdq, x86_wait :: CodeGen s e ()
+ Harpy.X86CodeGen: x86_cmp, x86_add, x86_xor, x86_sub, x86_and, x86_sbb, x86_adc, x86_or :: Word8
+ Harpy.X86CodeGen: x86_dword_size, x86_qword_size :: Int
+ Harpy.X86CodeGen: x86_eax, x86_edi, x86_esi, x86_ebp, x86_esp, x86_ebx, x86_edx, x86_ecx :: Word8
+ Harpy.X86CodeGen: x86_edi_mask, x86_edx_mask, x86_ecx_mask, x86_eax_mask, x86_ebp_mask, x86_ebx_mask, x86_esi_mask :: Int
+ Harpy.X86CodeGen: x86_fadd, x86_fsubr, x86_fsub, x86_fcomp, x86_fcom, x86_fmul :: Word8
+ Harpy.X86CodeGen: x86_fdiv, x86_fdivr :: Word8
+ Harpy.X86CodeGen: x86_fp_c0, x86_fp_cc_mask, x86_fp_c3, x86_fp_c2, x86_fp_c1 :: Word32
+ Harpy.X86CodeGen: x86_fpcw_invopex_mask, x86_fpcw_roundc_mask, x86_fpcw_precc_mask, x86_fpcw_precex_mask, x86_fpcw_undfex_mask, x86_fpcw_ovfex_mask, x86_fpcw_zerodiv_mask, x86_fpcw_denopex_mask :: Word32
+ Harpy.X86CodeGen: x86_fpcw_prec_single, x86_fpcw_prec_extended, x86_fpcw_prec_double :: Word32
+ Harpy.X86CodeGen: x86_fpcw_round_nearest, x86_fpcw_round_tozero, x86_fpcw_round_up, x86_fpcw_round_down :: Word32
+ Harpy.X86CodeGen: x86_fsin, x86_fptan, x86_fsqrt, x86_frndint, x86_fprem1, x86_fprem, x86_fpatan, x86_fxam, x86_ftst, x86_fabs, x86_fcos :: CodeGen s e ()
+ Harpy.X86CodeGen: x86_lock_prefix, x86_address_prefix, x86_operand_prefix, x86_likely_prefix, x86_unlikely_prefix, x86_gs_prefix, x86_fs_prefix, x86_es_prefix, x86_ds_prefix, x86_ss_prefix, x86_cs_prefix, x86_rep_prefix, x86_repz_prefix, x86_repnz_prefix :: Word8
+ Harpy.X86CodeGen: x86_sar, x86_shr, x86_shl, x86_rcr, x86_rcl, x86_ror, x86_rol, x86_shlr, x86_shld :: Word8
+ Harpy.X86CodeGen: x86_sse_sd, x86_sse_ps, x86_sse_pd, x86_sse_ss :: X86_SSE_PFX
- Harpy.X86CodeGen: x86_mov_mem_imm :: Num a => Word32 -> Word32 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_mem_imm :: (Eq a, Num a) => Word32 -> Word32 -> a -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_mem_reg :: Num t => Word32 -> Word8 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_mem_reg :: (Eq t, Num t) => Word32 -> Word8 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_membase_imm :: Num a => Word8 -> Word32 -> Word32 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_membase_imm :: (Eq a, Num a) => Word8 -> Word32 -> Word32 -> a -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_membase_reg :: Num t => Word8 -> Word32 -> Word8 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_membase_reg :: (Eq t, Num t) => Word8 -> Word32 -> Word8 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_memindex_imm :: Num a => Word8 -> Word32 -> Word8 -> Word8 -> Word32 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_memindex_imm :: (Eq a, Num a) => Word8 -> Word32 -> Word8 -> Word8 -> Word32 -> a -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_memindex_reg :: Num t => Word8 -> Word32 -> Word8 -> Word8 -> Word8 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_memindex_reg :: (Eq t, Num t) => Word8 -> Word32 -> Word8 -> Word8 -> Word8 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_reg_mem :: Num t => Word8 -> Word32 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_reg_mem :: (Eq t, Num t) => Word8 -> Word32 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_reg_membase :: Num t => Word8 -> Word8 -> Word32 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_reg_membase :: (Eq t, Num t) => Word8 -> Word8 -> Word32 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_reg_memindex :: Num t => Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_reg_memindex :: (Eq t, Num t) => Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_reg_reg :: Num t => Word8 -> Word8 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_reg_reg :: (Eq t, Num t) => Word8 -> Word8 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_reg_regp :: Num t => Word8 -> Word8 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_reg_regp :: (Eq t, Num t) => Word8 -> Word8 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_mov_regp_reg :: Num t => Word8 -> Word8 -> t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_mov_regp_reg :: (Eq t, Num t) => Word8 -> Word8 -> t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_padding :: Num t => t -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_padding :: (Eq t, Num t) => t -> CodeGen e s ()
- Harpy.X86CodeGen: x86_xadd_mem_reg :: Num a => Word32 -> Word8 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_xadd_mem_reg :: (Eq a, Num a) => Word32 -> Word8 -> a -> CodeGen e s ()
- Harpy.X86CodeGen: x86_xadd_membase_reg :: Num a => Word8 -> Word32 -> Word8 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_xadd_membase_reg :: (Eq a, Num a) => Word8 -> Word32 -> Word8 -> a -> CodeGen e s ()
- Harpy.X86CodeGen: x86_xadd_reg_reg :: Num a => Word8 -> Word8 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_xadd_reg_reg :: (Eq a, Num a) => Word8 -> Word8 -> a -> CodeGen e s ()
- Harpy.X86CodeGen: x86_xchg_mem_reg :: Num a => Word32 -> Word8 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_xchg_mem_reg :: (Eq a, Num a) => Word32 -> Word8 -> a -> CodeGen e s ()
- Harpy.X86CodeGen: x86_xchg_membase_reg :: Num a => Word8 -> Word32 -> Word8 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_xchg_membase_reg :: (Eq a, Num a) => Word8 -> Word32 -> Word8 -> a -> CodeGen e s ()
- Harpy.X86CodeGen: x86_xchg_reg_reg :: Num a => Word8 -> Word8 -> a -> CodeGen e s ()
+ Harpy.X86CodeGen: x86_xchg_reg_reg :: (Eq a, Num a) => Word8 -> Word8 -> a -> CodeGen e s ()

Files

Harpy.hs view
@@ -15,8 +15,10 @@ ---------------------------------------------------------------------------- module Harpy(module Harpy.CodeGenMonad,              module Harpy.Call,-             module Harpy.X86Assembler) where+             module Harpy.X86Assembler,+             module Control.Monad.Trans) where  import Harpy.CodeGenMonad import Harpy.Call import Harpy.X86Assembler+import Control.Monad.Trans
Harpy/Call.hs view
@@ -23,8 +23,8 @@ #ifndef __HADDOCK__  $(callDecl "callAsVoid" [t|()|])-$(callDecl "callAsWord32ToWord32" [t|Word32 -> Word32|])-$(callDecl "callAs7PtrToVoid" [t|forall a b c d e f g . Ptr a -> Ptr b -> Ptr c -> Ptr d -> Ptr e -> Ptr f -> Ptr g -> () |])+-- $(callDecl "callAsWord32ToWord32" [t|Word32 -> Word32|])+-- $(callDecl "callAs7PtrToVoid" [t|forall a b c d e f g . Ptr a -> Ptr b -> Ptr c -> Ptr d -> Ptr e -> Ptr f -> Ptr g -> () |])  #else 
Harpy/CodeGenMonad.hs view
@@ -86,6 +86,7 @@ import Data.List import qualified Data.Map as Map import Foreign+import Foreign.C.Types import System.IO  import Control.Monad.Trans@@ -225,6 +226,12 @@ runCodeGen cg uenv ustate =     runCodeGenWithConfig cg uenv ustate defaultCodeGenConfig +foreign import ccall "static stdlib.h"+  memalign :: CUInt -> CUInt -> IO (Ptr a)++foreign import ccall "static sys/mman.h"+  mprotect :: CUInt -> CUInt -> Int -> IO Int+ -- | Like 'runCodeGen', but allows more control over the code -- generation process.  In addition to a code generator and a user -- environment and state, a code generation configuration must be@@ -234,7 +241,10 @@ runCodeGenWithConfig (CodeGen cg) uenv ustate conf =     do (buf, sze) <- case customCodeBuffer conf of                        Nothing -> do let initSize = codeBufferSize conf-                                     arr <- mallocBytes initSize+                                     let size = fromIntegral initSize+                                     arr <- memalign 0x1000 size+                                     -- 0x7 = PROT_{READ,WRITE,EXEC}+                                     _ <- mprotect (fromIntegral $ ptrToIntPtr arr) size 0x7                                      return (arr, initSize)                        Just (buf, sze) -> return (buf, sze)        let env = CodeGenEnv {tailContext = True}
Harpy/X86CodeGen.hs view
@@ -651,7 +651,7 @@ x86_cmpxchg_membase_reg basereg disp reg =     emit8 0x0f >> emit8 0xb1 >> x86_membase_emit reg basereg disp -x86_xchg :: Num a => a -> CodeGen e s ()+x86_xchg :: (Eq a, Num a) => a -> CodeGen e s () x86_xchg size = if size == 1 then emit8 0x86 else emit8 0x87  x86_xchg_reg_reg dreg reg size =@@ -661,7 +661,7 @@ x86_xchg_membase_reg basereg disp reg size =     do x86_xchg size ; x86_membase_emit reg basereg disp -x86_xadd :: Num a => a -> CodeGen e s ()+x86_xadd :: (Eq a, Num a) => a -> CodeGen e s () x86_xadd size = do emit8 0x0f ; if size == 1 then emit8 0xc0 else emit8 0xc1 x86_xadd_reg_reg dreg reg size = x86_xadd size >> x86_reg_emit reg dreg x86_xadd_mem_reg mem reg size = x86_xadd size >> x86_mem_emit reg mem@@ -871,7 +871,7 @@     do emit8 0xf7        x86_membase_emit (6 + (if is_signed then 1 else 0)) basereg disp -x86_mov1 :: Num t => t -> CodeGen e s ()+x86_mov1 :: (Eq t, Num t) => t -> CodeGen e s () x86_mov1 size =     case size of          1 -> emit8 0x88@@ -879,7 +879,7 @@          4 -> emit8 0x89          _ -> failCodeGen (PP.text "invalid operand size")        -x86_mov2 :: Num t => t -> CodeGen e s ()+x86_mov2 :: (Eq t, Num t) => t -> CodeGen e s () x86_mov2 size =     case size of          1 -> emit8 0x8a@@ -887,42 +887,42 @@          4 -> emit8 0x8b          _ -> failCodeGen (PP.text "invalid operand size")        -x86_mov_mem_reg :: (Num t) => Word32 -> Word8 -> t -> CodeGen e s ()+x86_mov_mem_reg :: (Eq t, Num t) => Word32 -> Word8 -> t -> CodeGen e s () x86_mov_mem_reg mem reg size =             do x86_mov1 size ; x86_mem_emit reg mem    -x86_mov_regp_reg :: (Num t) => Word8 -> Word8 -> t -> CodeGen e s ()+x86_mov_regp_reg :: (Eq t, Num t) => Word8 -> Word8 -> t -> CodeGen e s () x86_mov_regp_reg regp reg size =           do x86_mov1 size ; x86_regp_emit reg regp -x86_mov_reg_regp :: (Num t) => Word8 -> Word8 -> t -> CodeGen e s ()+x86_mov_reg_regp :: (Eq t, Num t) => Word8 -> Word8 -> t -> CodeGen e s () x86_mov_reg_regp reg regp size =           do x86_mov2 size ; x86_regp_emit reg regp -x86_mov_membase_reg :: (Num t) => Word8 -> Word32 -> Word8 -> t -> CodeGen e s ()+x86_mov_membase_reg :: (Eq t, Num t) => Word8 -> Word32 -> Word8 -> t -> CodeGen e s () x86_mov_membase_reg basereg disp reg size =        do x86_mov1 size ; x86_membase_emit reg basereg disp       -x86_mov_memindex_reg :: (Num t) => Word8 -> Word32 -> Word8 -> Word8 -> Word8 -> t -> CodeGen e s ()+x86_mov_memindex_reg :: (Eq t, Num t) => Word8 -> Word32 -> Word8 -> Word8 -> Word8 -> t -> CodeGen e s () x86_mov_memindex_reg basereg disp indexreg shft reg size =        do x86_mov1 size ; x86_memindex_emit reg basereg disp indexreg shft -x86_mov_reg_reg :: (Num t) => Word8 -> Word8 -> t -> CodeGen e s ()+x86_mov_reg_reg :: (Eq t, Num t) => Word8 -> Word8 -> t -> CodeGen e s () x86_mov_reg_reg dreg reg size =            do x86_mov2 size        x86_reg_emit dreg reg   -x86_mov_reg_mem :: (Num t) => Word8 -> Word32 -> t -> CodeGen e s ()+x86_mov_reg_mem :: (Eq t, Num t) => Word8 -> Word32 -> t -> CodeGen e s () x86_mov_reg_mem reg mem size =             do x86_mov2 size        x86_mem_emit reg mem    -x86_mov_reg_membase :: (Num t) => Word8 -> Word8 -> Word32 -> t -> CodeGen e s ()+x86_mov_reg_membase :: (Eq t, Num t) => Word8 -> Word8 -> Word32 -> t -> CodeGen e s () x86_mov_reg_membase reg basereg disp size =     do x86_mov2 size        x86_membase_emit reg basereg disp       -x86_mov_reg_memindex :: (Num t) => Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> t -> CodeGen e s ()+x86_mov_reg_memindex :: (Eq t, Num t) => Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> t -> CodeGen e s () x86_mov_reg_memindex _ _ _ 4 _ _ =     failCodeGen $ PP.text "x86_mov_reg_memindex: cannot use (E)SP as index register" x86_mov_reg_memindex reg basereg disp indexreg shft size =   @@ -933,7 +933,7 @@ x86_mov_reg_imm reg imm =          emit8 (0xb8 + reg) >> x86_imm_emit32 imm   -x86_mov_mem_imm :: (Num a) => Word32 -> Word32 -> a -> CodeGen e s ()+x86_mov_mem_imm :: (Eq a, Num a) => Word32 -> Word32 -> a -> CodeGen e s () x86_mov_mem_imm mem imm size =             if size == 1        then do emit8 0xc6;    @@ -948,7 +948,7 @@                        x86_mem_emit 0 mem                             x86_imm_emit32 imm      -x86_mov_membase_imm :: (Num a) => Word8 -> Word32 -> Word32 -> a -> CodeGen e s ()+x86_mov_membase_imm :: (Eq a, Num a) => Word8 -> Word32 -> Word32 -> a -> CodeGen e s () x86_mov_membase_imm basereg disp imm size =        if size == 1        then do emit8 0xc6     @@ -963,7 +963,7 @@                        x86_membase_emit 0 basereg disp                                x86_imm_emit32 imm      -x86_mov_memindex_imm :: (Num a) => Word8 -> Word32 -> Word8 -> Word8 -> Word32 -> a -> CodeGen e s ()+x86_mov_memindex_imm :: (Eq a, Num a) => Word8 -> Word32 -> Word8 -> Word8 -> Word32 -> a -> CodeGen e s () x86_mov_memindex_imm basereg disp indexreg shft imm size =        if size == 1     then do emit8 0xc6        @@ -1429,7 +1429,7 @@  -- Fast instruction sequences for 1 to 7-byte noops. -x86_padding ::(Num t) => t -> CodeGen e s ()+x86_padding :: (Eq t, Num t) => t -> CodeGen e s () x86_padding size =         case size of       1 -> x86_nop@@ -1489,38 +1489,38 @@  -- TODO: Move signatures to definition, delete duplicates. x86_xchg_reg_reg ::-  (Num a) =>+  (Eq a, Num a) =>   Word8   -> Word8   -> a   -> CodeGen e s () x86_xchg_mem_reg ::-  (Num a) =>+  (Eq a, Num a) =>   Word32   -> Word8   -> a   -> CodeGen e s () x86_xchg_membase_reg ::-  (Num a) =>+  (Eq a, Num a) =>   Word8   -> Word32   -> Word8   -> a   -> CodeGen e s () x86_xadd_reg_reg ::-  (Num a) =>+  (Eq a, Num a) =>   Word8   -> Word8   -> a   -> CodeGen e s () x86_xadd_mem_reg ::-  (Num a) =>+  (Eq a, Num a) =>   Word32   -> Word8   -> a   -> CodeGen e s () x86_xadd_membase_reg ::-  (Num a) =>+  (Eq a, Num a) =>   Word8   -> Word32   -> Word8
harpy.cabal view
@@ -1,13 +1,13 @@ Cabal-version:  >=1.2 Build-type: Simple Name:           harpy-Version:        0.4.3.0+Version:        0.5.0.0 License:        GPL License-file:   COPYING Author:         Dirk Kleeblatt <klee@cs.tu-berlin.de>-                Martin Grabmueller <martin.grabmueller@eleven.de>-Maintainer:     klee@cs.tu-berlin.de, martin.grabmueller@eleven.de-Homepage:       http://uebb.cs.tu-berlin.de/harpy/+                Martin Grabmueller <martin@grabmueller.de>+Maintainer:     klee@cs.tu-berlin.de, martin@grabmueller.de+Homepage:       http://code.haskell.org/harpy/ Category:       Code Generation Synopsis:       Runtime code generation for x86 machine code Description:	The package contains the following components:@@ -36,7 +36,7 @@           Harpy's homepage: <http://uebb.cs.tu-berlin.de/harpy/> Stability:      Experimental -Extra-source-files: +Extra-source-files:     NEWS README Makefile     doc/Makefile doc/tutorial.lhs doc/larger-tutorial.lhs     examples/evaluator/ArithTypes.hs examples/evaluator/ArithParser.hs@@ -45,13 +45,13 @@ Library   Build-depends:     base >= 4 && < 5,-    parsec >= 1 && < 3,-    mtl >= 1 && < 2,+    parsec >= 1 && < 4,+    mtl >= 1 && < 3,     template-haskell >= 2 && < 3,     pretty >= 1 && < 2,     containers >= 0.3 && < 1,     array >= 0.3 && < 1,-    disassembler >= 0.1.0.1+    disassembler >= 0.2.0.0   Exposed-Modules:     Harpy,     Harpy.X86CodeGen,@@ -60,8 +60,8 @@     Harpy.Call,     Harpy.X86Disassembler,     Harpy.X86CGCombinators-  Extensions: -    ForeignFunctionInterface, MultiParamTypeClasses, +  Extensions:+    ForeignFunctionInterface, MultiParamTypeClasses,     TemplateHaskell, CPP, FlexibleContexts, FlexibleInstances,     RankNTypes