packages feed

x86-64bit 0.4.3 → 0.4.4

raw patch · 4 files changed

+20/−7 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ CodeGen.X86: Addr :: BaseReg s -> Displacement -> IndexReg s -> Addr s
+ CodeGen.X86: [IPMemOp] :: Immediate Int32 -> Operand rw s
+ CodeGen.X86: [ImmOp] :: Immediate Int64 -> Operand R s
+ CodeGen.X86: [MemOp] :: IsSize s' => Addr s' -> Operand rw s
+ CodeGen.X86: [RegOp] :: Reg s -> Operand rw s
+ CodeGen.X86: [baseReg] :: Addr s -> BaseReg s
+ CodeGen.X86: [displacement] :: Addr s -> Displacement
+ CodeGen.X86: [indexReg] :: Addr s -> IndexReg s
+ CodeGen.X86: class FromReg c
+ CodeGen.X86: data Addr s
+ CodeGen.X86: data Address :: Size -> *
+ CodeGen.X86: data Reg :: Size -> *
+ CodeGen.X86: data Scale
+ CodeGen.X86: fromReg :: FromReg c => Reg s -> c s
+ CodeGen.X86: type BaseReg s = Maybe (Reg s)
+ CodeGen.X86: type Displacement = Maybe Int32
+ CodeGen.X86: type IndexReg s = Maybe (Scale, Reg s)

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+# Version 0.4.4
+
+-   export some useful data types 
+
 # Version 0.4.3
 
 -   fixes to compile on GHC 7.10 and on Windows
CodeGen/X86.hs view
@@ -9,6 +9,7 @@     , HasSize (..)     , IsSize     -- * Registers+    , Reg , FromReg (..)     -- ** 64 bit registers     , rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15     -- ** 32 bit registers@@ -22,6 +23,7 @@     -- ** SSE registers     , xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7     -- * Addresses+    , Addr (..), BaseReg, IndexReg, Scale, Displacement, Address     , addr     , addr8     , addr16@@ -31,7 +33,7 @@     , ipRel8     -- * Operands     , Access (..)-    , Operand+    , Operand (..)     , resizeOperand     , ipRelValue     -- * Conditions
CodeGen/X86/Asm.hs view
@@ -62,6 +62,7 @@  ------------------------------------------------------- sizes +-- | The size of a register (in bits) data Size = S8 | S16 | S32 | S64 | S128     deriving (Eq, Ord) @@ -135,7 +136,7 @@  ------------------------------------------------------- scale --- replace with Size?+-- | The scaling of an index. (replace with Size?) newtype Scale = Scale Word8     deriving (Eq) @@ -158,6 +159,7 @@  ------------------------------------------------------- operand +-- | An operand can be an immediate, a register, a memory address or RIP-relative (memory address relative to the instruction pointer) data Operand :: Access -> Size -> * where     ImmOp     :: Immediate Int64 -> Operand R s     RegOp     :: Reg s -> Operand rw s@@ -198,19 +200,24 @@     = R     -- ^ readable operand     | RW    -- ^ readable and writeable operand +-- | A register. data Reg :: Size -> * where-    NormalReg :: Word8 -> Reg s-    HighReg   :: Word8 -> Reg S8-    XMM       :: Word8 -> Reg S128+    NormalReg :: Word8 -> Reg s      -- \"normal\" registers are for example @AL@, @BX@, @ECX@ or @RSI@+    HighReg   :: Word8 -> Reg S8     -- \"high\" registers are @AH@, @BH@, @CH@ etc+    XMM       :: Word8 -> Reg S128   -- XMM registers  deriving instance Eq (Reg s) deriving instance Ord (Reg s) +-- | A (relative) address is made up base a base register, a displacement, and a (scaled) index.+-- For example in @[eax+4*ecx+20]@ the base register is @eax@, the displacement is @20@ and the+-- index is @4*ecx@. data Addr s = Addr     { baseReg        :: BaseReg s     , displacement   :: Displacement     , indexReg       :: IndexReg s     }+    deriving (Eq)  type BaseReg s    = Maybe (Reg s) type IndexReg s   = Maybe (Scale, Reg s)@@ -222,7 +229,7 @@ pattern NoIndex = Nothing pattern IndexReg a b = Just (a, b) --- | intruction pointer relative address+-- | intruction pointer (RIP) relative address ipRel :: Label -> Operand rw s ipRel l = IPMemOp $ LabelRelValue S32 l 
x86-64bit.cabal view
@@ -1,5 +1,5 @@ name:                x86-64bit
-version:             0.4.3
+version:             0.4.4
 homepage:            https://github.com/divipp/x86-64
 synopsis:            Runtime code generation for x86 64 bit machine code
 description:         The primary goal of x86-64bit is to provide a lightweight assembler for machine generated 64 bit x86 assembly instructions. See README.md for further details.