{-# language PatternSynonyms #-} module CodeGen.X86 ( -- * Byte sequences Bytes (..) , HasBytes (..) -- * Sizes (in bits) , Size (..) , HasSize (..) , IsSize -- * Operands , Access (..) , Operand , resizeOperand -- ** Memory references , addr , addr8 , addr16 , addr32 , addr64 , ipBase -- ** Registers -- *** 64 bit registers , rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15 -- *** 32 bit registers , eax, ecx, edx, ebx, esp, ebp, esi, edi, r8d, r9d, r10d, r11d, r12d, r13d, r14d, r15d -- *** 16 bit registers , ax, cx, dx, bx, sp, bp, si, di, r8w, r9w, r10w, r11w, r12w, r13w, r14w, r15w -- *** 8 bit low registers , al, cl, dl, bl, spl, bpl, sil, dil, r8b, r9b, r10b, r11b, r12b, r13b, r14b, r15b -- *** 8 bit high registers , ah, ch, dh, bh -- *** SSE registers , xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7 -- * Conditions , Condition , pattern O , pattern NO , pattern B, pattern C , pattern NB, pattern NC , pattern E, pattern Z , pattern NE, pattern NZ , pattern NA, pattern BE , pattern A, pattern NBE , pattern S , pattern NS , pattern P , pattern NP , pattern L , pattern NL , pattern NG, pattern LE , pattern G, pattern NLE -- * Assembly codes , Code , pattern Ret , pattern Nop , pattern PushF , pattern PopF , pattern Cmc , pattern Clc , pattern Stc , pattern Cli , pattern Sti , pattern Cld , pattern Std , pattern Inc , pattern Dec , pattern Not , pattern Neg , pattern Add , pattern Or , pattern Adc , pattern Sbb , pattern And , pattern Sub , pattern Xor , pattern Cmp , pattern Test , pattern Mov , pattern Cmov , pattern Rol , pattern Ror , pattern Rcl , pattern Rcr , pattern Shl , pattern Shr , pattern Sar , pattern Xchg , pattern Movd , pattern Movq , pattern Movdqa , pattern Paddb , pattern Paddw , pattern Paddd , pattern Paddq , pattern Psubb , pattern Psubw , pattern Psubd , pattern Psubq , pattern Pxor , pattern Psllw , pattern Pslld , pattern Psllq , pattern Pslldq , pattern Psrlw , pattern Psrld , pattern Psrlq , pattern Psrldq , pattern Psraw , pattern Psrad , pattern Lea , pattern J , pattern Pop , pattern Push , pattern Call , pattern Jmpq , pattern Jmp , pattern Data , pattern Align , pattern Label , pattern Scope , pattern Up -- * Compound assembly codes , (<>) , (<.>), (<:>) , jmp, jmp_back, jmp8, jmp32 , j, j8, j32 , j_back, j_back8, j_back32 , if_ , lea8 , leaData -- * Compilation , Callable , compile -- * Calling C and Haskell from Assembly , callFun , saveNonVolatile , arg1, arg2, arg3, arg4 , result , CallableHs , hsPtr -- * Misc , runTests , CString (..) , traceReg , printf ) where import Data.Monoid import CodeGen.X86.Asm import CodeGen.X86.CodeGen import CodeGen.X86.FFI import CodeGen.X86.CallConv import CodeGen.X86.Utils import CodeGen.X86.Tests