harpy-0.2: Runtime code generation for x86 machine codeContentsIndex
Harpy.X86CodeGen
Portabilityportable (but generated code non-portable)
Stabilityprovisional
Maintainer{magr,klee}@cs.tu-berlin.de
Contents
Constants
Machine characteristics
Register numbers
Register masks and predicates
ALU operations
Shift operations
Condition codes
Functions
Utility functions
Code emission
Call instructions
Function prologue and epilogue
Jump and branch
Stack operations
Data movement
Arithmetic
Exchange
String operations
Bitwise shift
Conditional move
Conditional set
Address calculation
Conversion
Miscellaneous
Other utilities
Description

Functions for generating x86 machine code instructions. The functions make use of the code generation monad in module Harpy.CodeGenMonad for emitting binary code into a code buffer.

This module is very low-level, since there are different functions for different addressing modes. A more convenient interface is provided in module Harpy.X86Assembler, which uses the operand types to determine the correct addressing modes for all supported instructions.

Note: this file does not (yet) provide the complete x86 instruction set, not even all user-mode instructions. For some operations, some addressing modes are missing as well.

Copyright notice:

The information in this file is based on the header file x86-codegen.h from the mono distribution, which has the following copyright information:

 
  * x86-codegen.h: Macros for generating x86 code
  *
  * Authors:
  *   Paolo Molaro (lupus@ximian.com)
  *   Intel Corporation (ORP Project)
  *   Sergey Chaban (serge@wildwestsoftware.com)
  *   Dietmar Maurer (dietmar@ximian.com)
  *   Patrik Torstensson
  * 
  * Copyright (C)  2000 Intel Corporation.  All rights reserved.
  * Copyright (C)  2001, 2002 Ximian, Inc.
  *
 
Synopsis
x86_dword_size :: Int
x86_qword_size :: Int
x86_eax :: Word8
x86_ecx :: Word8
x86_edx :: Word8
x86_ebx :: Word8
x86_esp :: Word8
x86_ebp :: Word8
x86_esi :: Word8
x86_edi :: Word8
x86_nobasereg :: Word8
x86_eax_mask :: Int
x86_ecx_mask :: Int
x86_edx_mask :: Int
x86_ebx_mask :: Int
x86_esi_mask :: Int
x86_edi_mask :: Int
x86_callee_regs :: Int
x86_caller_regs :: Int
x86_byte_regs :: Int
x86_add :: Word8
x86_or :: Word8
x86_adc :: Word8
x86_sbb :: Word8
x86_and :: Word8
x86_sub :: Word8
x86_xor :: Word8
x86_cmp :: Word8
x86_rol :: Word8
x86_ror :: Word8
x86_rcl :: Word8
x86_rcr :: Word8
x86_shl :: Word8
x86_shr :: Word8
x86_sar :: Word8
x86_cc_eq :: Int
x86_cc_e :: Int
x86_cc_z :: Int
x86_cc_ne :: Int
x86_cc_nz :: Int
x86_cc_lt :: Int
x86_cc_b :: Int
x86_cc_c :: Int
x86_cc_nae :: Int
x86_cc_le :: Int
x86_cc_be :: Int
x86_cc_na :: Int
x86_cc_gt :: Int
x86_cc_a :: Int
x86_cc_nbe :: Int
x86_cc_ge :: Int
x86_cc_ae :: Int
x86_cc_nb :: Int
x86_cc_nc :: Int
x86_cc_lz :: Int
x86_cc_s :: Int
x86_cc_gez :: Int
x86_cc_ns :: Int
x86_cc_p :: Int
x86_cc_np :: Int
x86_cc_pe :: Int
x86_cc_po :: Int
x86_cc_o :: Int
x86_cc_no :: Int
x86_is_scratch :: Int -> Bool
x86_is_callee :: Int -> Bool
x86_imm_emit32 :: Word32 -> CodeGen e s ()
x86_imm_emit16 :: Word16 -> CodeGen e s ()
x86_imm_emit8 :: Word8 -> CodeGen e s ()
x86_membase_emit :: Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_alu_reg_imm :: Word8 -> Word8 -> Int -> CodeGen e s ()
x86_call_hs :: FunPtr a -> CodeGen e s ()
x86_call_membase :: Word8 -> Word32 -> CodeGen s e ()
x86_call_mem :: Word32 -> CodeGen s e ()
x86_call_reg :: Word8 -> CodeGen s e ()
x86_call_imm :: Word32 -> CodeGen s e ()
x86_prolog :: Int -> Int -> CodeGen e s ()
x86_epilog :: Int -> CodeGen e s ()
x86_enter :: Word16 -> CodeGen s e ()
x86_leave :: CodeGen s e ()
x86_ret :: CodeGen s e ()
x86_ret_imm :: Word16 -> CodeGen s e ()
x86_jecxz :: forall e s . Word8 -> CodeGen e s ()
x86_branch :: forall e s . Int -> Int -> Bool -> CodeGen e s ()
x86_branch32 :: forall e s . Int -> Word32 -> Bool -> CodeGen e s ()
x86_branch8 :: forall e s . Int -> Word8 -> Bool -> CodeGen e s ()
x86_jump_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_jump_mem :: forall e s . Word32 -> CodeGen e s ()
x86_jump_reg :: forall e s . Word8 -> CodeGen e s ()
x86_jump32 :: forall e s . Word32 -> CodeGen e s ()
x86_jump8 :: forall e s . Word8 -> CodeGen e s ()
x86_loopne :: forall e s . Word8 -> CodeGen e s ()
x86_loope :: forall e s . Word8 -> CodeGen e s ()
x86_loop :: forall e s . Word8 -> CodeGen e s ()
x86_push_reg :: forall e s . Word8 -> CodeGen e s ()
x86_push_regp :: forall e s . Word8 -> CodeGen e s ()
x86_push_mem :: forall e s . Word32 -> CodeGen e s ()
x86_push_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_push_imm :: forall e s . Word32 -> CodeGen e s ()
x86_push_imm_template :: forall e s . CodeGen e s ()
x86_push_memindex :: forall e s . Word8 -> Word32 -> Word8 -> Word8 -> CodeGen e s ()
x86_pop_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_pop_mem :: forall e s . Word32 -> CodeGen e s ()
x86_pop_reg :: forall e s . Word8 -> CodeGen e s ()
x86_popfd :: forall e s . CodeGen e s ()
x86_pushfd :: forall e s . CodeGen e s ()
x86_popad :: forall e s . CodeGen e s ()
x86_pushad :: forall e s . CodeGen e s ()
x86_mov_reg_reg :: forall t e s . Num t => Word8 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_imm :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_mov_mem_imm :: forall a e s . Num a => Word32 -> Word32 -> a -> CodeGen e s ()
x86_mov_membase_imm :: forall a e s . Num a => Word8 -> Word32 -> Word32 -> a -> CodeGen e s ()
x86_mov_memindex_imm :: forall a e s . Num a => Word8 -> Word32 -> Word8 -> Word8 -> Word32 -> a -> CodeGen e s ()
x86_mov_mem_reg :: forall t e s . Num t => Word32 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_mem :: forall t e s . Num t => Word8 -> Word32 -> t -> CodeGen e s ()
x86_mov_regp_reg :: forall t e s . Num t => Word8 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_regp :: forall t e s . Num t => Word8 -> Word8 -> t -> CodeGen e s ()
x86_mov_membase_reg :: forall t e s . Num t => Word8 -> Word32 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_membase :: forall t e s . Num t => Word8 -> Word8 -> Word32 -> t -> CodeGen e s ()
x86_mov_memindex_reg :: forall t e s . Num t => Word8 -> Word32 -> Word8 -> Word8 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_memindex :: forall e s t . Num t => Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> t -> CodeGen e s ()
x86_xadd_reg_reg :: forall a e s . Num a => Word8 -> Word8 -> a -> CodeGen e s ()
x86_xadd_mem_reg :: forall a e s . Num a => Word32 -> Word8 -> a -> CodeGen e s ()
x86_xadd_membase_reg :: forall a e s . Num a => Word8 -> Word32 -> Word8 -> a -> CodeGen e s ()
x86_inc_mem :: forall e s . Word32 -> CodeGen e s ()
x86_inc_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_inc_reg :: forall e s . Word8 -> CodeGen e s ()
x86_dec_mem :: forall e s . Word32 -> CodeGen e s ()
x86_dec_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_dec_reg :: forall e s . Word8 -> CodeGen e s ()
x86_not_mem :: forall e s . Word32 -> CodeGen e s ()
x86_not_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_not_reg :: forall e s . Word8 -> CodeGen e s ()
x86_neg_mem :: forall e s . Word32 -> CodeGen e s ()
x86_neg_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_neg_reg :: forall e s . Word8 -> CodeGen e s ()
x86_alu_mem_imm :: forall e s . Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_alu_membase_imm :: forall e s . Word8 -> Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_alu_membase8_imm :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_alu_mem_reg :: forall e s . Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_alu_membase_reg :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_alu_reg_reg :: forall e s . Word8 -> Word8 -> Word8 -> CodeGen e s ()
x86_alu_reg8_reg8 :: forall e s . Word8 -> Word8 -> Word8 -> Bool -> Bool -> CodeGen e s ()
x86_alu_reg_mem :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_alu_reg_membase :: forall e s . Word8 -> Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_mul_reg :: forall e s . Word8 -> Bool -> CodeGen e s ()
x86_mul_mem :: forall e s . Word32 -> Bool -> CodeGen e s ()
x86_mul_membase :: forall e s . Word8 -> Word32 -> Bool -> CodeGen e s ()
x86_imul_reg_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_imul_reg_membase :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_imul_reg_reg_imm :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_imul_reg_mem :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_imul_reg_mem_imm :: forall e s . Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_imul_reg_membase_imm :: forall e s . Word8 -> Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_div_reg :: forall e s . Word8 -> Bool -> CodeGen e s ()
x86_div_mem :: forall e s . Word32 -> Bool -> CodeGen e s ()
x86_div_membase :: forall e s . Word8 -> Word32 -> Bool -> CodeGen e s ()
x86_test_reg_imm :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_test_mem_imm :: forall e s . Word32 -> Word32 -> CodeGen e s ()
x86_test_membase_imm :: forall e s . Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_test_reg_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_test_mem_reg :: forall e s . Word32 -> Word8 -> CodeGen e s ()
x86_test_membase_reg :: forall e s . Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_cmpxchg_reg_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_cmpxchg_mem_reg :: forall e s . Word32 -> Word8 -> CodeGen e s ()
x86_cmpxchg_membase_reg :: forall e s . Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_xchg_reg_reg :: forall a e s . Num a => Word8 -> Word8 -> a -> CodeGen e s ()
x86_xchg_mem_reg :: forall a e s . Num a => Word32 -> Word8 -> a -> CodeGen e s ()
x86_xchg_membase_reg :: forall a e s . Num a => Word8 -> Word32 -> Word8 -> a -> CodeGen e s ()
x86_stosb :: CodeGen s e ()
x86_stosl :: CodeGen s e ()
x86_stosd :: CodeGen s e ()
x86_movsb :: CodeGen s e ()
x86_movsl :: CodeGen s e ()
x86_movsd :: CodeGen s e ()
x86_shift_reg_imm :: forall e s . Word8 -> Word8 -> Word8 -> CodeGen e s ()
x86_shift_mem_imm :: forall e s . Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_shift_membase_imm :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_shift_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_shift_mem :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_shift_membase :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_shrd_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_shrd_reg_imm :: forall e s . Word8 -> Word8 -> Word8 -> CodeGen e s ()
x86_shld_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_shld_reg_imm :: forall e s . Word8 -> Word8 -> Word8 -> CodeGen e s ()
x86_cmov_membase :: forall e s . Int -> Bool -> Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_cmov_mem :: forall e s . Int -> Bool -> Word8 -> Word32 -> CodeGen e s ()
x86_cmov_reg :: forall e s . Int -> Bool -> Word8 -> Word8 -> CodeGen e s ()
x86_set_membase :: forall e s . Int -> Word8 -> Word32 -> Bool -> CodeGen e s ()
x86_set_mem :: forall e s . Int -> Word32 -> Bool -> CodeGen e s ()
x86_set_reg :: forall e s . Int -> Word8 -> Bool -> CodeGen e s ()
x86_lea_mem :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_lea_membase :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_lea_memindex :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> CodeGen e s ()
x86_cdq :: CodeGen s e ()
x86_widen_memindex :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> Bool -> Bool -> CodeGen e s ()
x86_widen_membase :: forall e s . Word8 -> Word8 -> Word32 -> Bool -> Bool -> CodeGen e s ()
x86_widen_mem :: forall e s . Word8 -> Word32 -> Bool -> Bool -> CodeGen e s ()
x86_widen_reg :: forall e s . Word8 -> Word8 -> Bool -> Bool -> CodeGen e s ()
x86_sahf :: CodeGen s e ()
x86_wait :: CodeGen s e ()
x86_nop :: CodeGen s e ()
x86_breakpoint :: CodeGen s e ()
x86_rdtsc :: CodeGen s e ()
x86_cld :: CodeGen s e ()
negateCC :: Int -> Int
Constants
Machine characteristics
x86_dword_size :: Int
Sizes of various machine data types in bytes.
x86_qword_size :: Int
Register numbers
x86 general-purpose register numbers
x86_eax :: Word8
x86_ecx :: Word8
x86_edx :: Word8
x86_ebx :: Word8
x86_esp :: Word8
x86_ebp :: Word8
x86_esi :: Word8
x86_edi :: Word8
x86_nobasereg :: Word8
Used to encode the fact that no base register is used in an instruction.
Register masks and predicates
x86_eax_mask :: Int
x86_ecx_mask :: Int
x86_edx_mask :: Int
x86_ebx_mask :: Int
x86_esi_mask :: Int
x86_edi_mask :: Int
Bitvector masks for general-purpose registers
x86_callee_regs :: Int
Bitvector mask for callee-saved registers
x86_caller_regs :: Int
Bitvector mask for caller-saved registers
x86_byte_regs :: Int
Bitvector mask for byte-adressable registers
ALU operations
x86_add :: Word8
x86_or :: Word8
x86_adc :: Word8
x86_sbb :: Word8
x86_and :: Word8
x86_sub :: Word8
x86_xor :: Word8
x86_cmp :: Word8
Opcodes for ALU instructions
Shift operations
x86_rol :: Word8
x86_ror :: Word8
x86_rcl :: Word8
x86_rcr :: Word8
x86_shl :: Word8
x86_shr :: Word8
x86_sar :: Word8
Opcodes for shift instructions
Condition codes
x86_cc_eq :: Int
x86_cc_e :: Int
x86_cc_z :: Int
x86_cc_ne :: Int
x86_cc_nz :: Int
x86_cc_lt :: Int
x86_cc_b :: Int
x86_cc_c :: Int
x86_cc_nae :: Int
x86_cc_le :: Int
x86_cc_be :: Int
x86_cc_na :: Int
x86_cc_gt :: Int
x86_cc_a :: Int
x86_cc_nbe :: Int
x86_cc_ge :: Int
x86_cc_ae :: Int
x86_cc_nb :: Int
x86_cc_nc :: Int
x86_cc_lz :: Int
x86_cc_s :: Int
x86_cc_gez :: Int
x86_cc_ns :: Int
x86_cc_p :: Int
x86_cc_np :: Int
x86_cc_pe :: Int
x86_cc_po :: Int
x86_cc_o :: Int
x86_cc_no :: Int
Integer conditions codes
Functions
Utility functions
x86_is_scratch :: Int -> Bool
Returns true when the given register is caller-saved.
x86_is_callee :: Int -> Bool
Returns true when the given register is caller-saved.
Code emission
x86_imm_emit32 :: Word32 -> CodeGen e s ()
Emit a 32-bit constant to the instruction stream.
x86_imm_emit16 :: Word16 -> CodeGen e s ()
Emit a 16-bit constant to the instruction stream.
x86_imm_emit8 :: Word8 -> CodeGen e s ()
Emit a 8-bit constant to the instruction stream.
x86_membase_emit :: Word8 -> Word8 -> Word32 -> CodeGen e s ()
Emit a mem+base address encoding
x86_alu_reg_imm :: Word8 -> Word8 -> Int -> CodeGen e s ()
Call instructions
x86_call_hs :: FunPtr a -> CodeGen e s ()
x86_call_membase :: Word8 -> Word32 -> CodeGen s e ()
x86_call_mem :: Word32 -> CodeGen s e ()
x86_call_reg :: Word8 -> CodeGen s e ()
x86_call_imm :: Word32 -> CodeGen s e ()
Function prologue and epilogue
x86_prolog :: Int -> Int -> CodeGen e s ()
x86_epilog :: Int -> CodeGen e s ()
x86_enter :: Word16 -> CodeGen s e ()
x86_leave :: CodeGen s e ()
x86_ret :: CodeGen s e ()
x86_ret_imm :: Word16 -> CodeGen s e ()
Jump and branch
x86_jecxz :: forall e s . Word8 -> CodeGen e s ()
x86_branch :: forall e s . Int -> Int -> Bool -> CodeGen e s ()
x86_branch32 :: forall e s . Int -> Word32 -> Bool -> CodeGen e s ()
x86_branch8 :: forall e s . Int -> Word8 -> Bool -> CodeGen e s ()
x86_jump_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_jump_mem :: forall e s . Word32 -> CodeGen e s ()
x86_jump_reg :: forall e s . Word8 -> CodeGen e s ()
x86_jump32 :: forall e s . Word32 -> CodeGen e s ()
x86_jump8 :: forall e s . Word8 -> CodeGen e s ()
x86_loopne :: forall e s . Word8 -> CodeGen e s ()
x86_loope :: forall e s . Word8 -> CodeGen e s ()
x86_loop :: forall e s . Word8 -> CodeGen e s ()
Stack operations
x86_push_reg :: forall e s . Word8 -> CodeGen e s ()
x86_push_regp :: forall e s . Word8 -> CodeGen e s ()
x86_push_mem :: forall e s . Word32 -> CodeGen e s ()
x86_push_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_push_imm :: forall e s . Word32 -> CodeGen e s ()
x86_push_imm_template :: forall e s . CodeGen e s ()
x86_push_memindex :: forall e s . Word8 -> Word32 -> Word8 -> Word8 -> CodeGen e s ()
x86_pop_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_pop_mem :: forall e s . Word32 -> CodeGen e s ()
x86_pop_reg :: forall e s . Word8 -> CodeGen e s ()
x86_popfd :: forall e s . CodeGen e s ()
x86_pushfd :: forall e s . CodeGen e s ()
x86_popad :: forall e s . CodeGen e s ()
x86_pushad :: forall e s . CodeGen e s ()
Data movement
x86_mov_reg_reg :: forall t e s . Num t => Word8 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_imm :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_mov_mem_imm :: forall a e s . Num a => Word32 -> Word32 -> a -> CodeGen e s ()
x86_mov_membase_imm :: forall a e s . Num a => Word8 -> Word32 -> Word32 -> a -> CodeGen e s ()
x86_mov_memindex_imm :: forall a e s . Num a => Word8 -> Word32 -> Word8 -> Word8 -> Word32 -> a -> CodeGen e s ()
x86_mov_mem_reg :: forall t e s . Num t => Word32 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_mem :: forall t e s . Num t => Word8 -> Word32 -> t -> CodeGen e s ()
x86_mov_regp_reg :: forall t e s . Num t => Word8 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_regp :: forall t e s . Num t => Word8 -> Word8 -> t -> CodeGen e s ()
x86_mov_membase_reg :: forall t e s . Num t => Word8 -> Word32 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_membase :: forall t e s . Num t => Word8 -> Word8 -> Word32 -> t -> CodeGen e s ()
x86_mov_memindex_reg :: forall t e s . Num t => Word8 -> Word32 -> Word8 -> Word8 -> Word8 -> t -> CodeGen e s ()
x86_mov_reg_memindex :: forall e s t . Num t => Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> t -> CodeGen e s ()
Arithmetic
x86_xadd_reg_reg :: forall a e s . Num a => Word8 -> Word8 -> a -> CodeGen e s ()
x86_xadd_mem_reg :: forall a e s . Num a => Word32 -> Word8 -> a -> CodeGen e s ()
x86_xadd_membase_reg :: forall a e s . Num a => Word8 -> Word32 -> Word8 -> a -> CodeGen e s ()
x86_inc_mem :: forall e s . Word32 -> CodeGen e s ()
x86_inc_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_inc_reg :: forall e s . Word8 -> CodeGen e s ()
x86_dec_mem :: forall e s . Word32 -> CodeGen e s ()
x86_dec_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_dec_reg :: forall e s . Word8 -> CodeGen e s ()
x86_not_mem :: forall e s . Word32 -> CodeGen e s ()
x86_not_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_not_reg :: forall e s . Word8 -> CodeGen e s ()
x86_neg_mem :: forall e s . Word32 -> CodeGen e s ()
x86_neg_membase :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_neg_reg :: forall e s . Word8 -> CodeGen e s ()
x86_alu_mem_imm :: forall e s . Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_alu_membase_imm :: forall e s . Word8 -> Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_alu_membase8_imm :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_alu_mem_reg :: forall e s . Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_alu_membase_reg :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_alu_reg_reg :: forall e s . Word8 -> Word8 -> Word8 -> CodeGen e s ()
x86_alu_reg8_reg8 :: forall e s . Word8 -> Word8 -> Word8 -> Bool -> Bool -> CodeGen e s ()
x86_alu_reg_mem :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_alu_reg_membase :: forall e s . Word8 -> Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_mul_reg :: forall e s . Word8 -> Bool -> CodeGen e s ()
x86_mul_mem :: forall e s . Word32 -> Bool -> CodeGen e s ()
x86_mul_membase :: forall e s . Word8 -> Word32 -> Bool -> CodeGen e s ()
x86_imul_reg_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_imul_reg_membase :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_imul_reg_reg_imm :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_imul_reg_mem :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_imul_reg_mem_imm :: forall e s . Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_imul_reg_membase_imm :: forall e s . Word8 -> Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_div_reg :: forall e s . Word8 -> Bool -> CodeGen e s ()
x86_div_mem :: forall e s . Word32 -> Bool -> CodeGen e s ()
x86_div_membase :: forall e s . Word8 -> Word32 -> Bool -> CodeGen e s ()
x86_test_reg_imm :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_test_mem_imm :: forall e s . Word32 -> Word32 -> CodeGen e s ()
x86_test_membase_imm :: forall e s . Word8 -> Word32 -> Word32 -> CodeGen e s ()
x86_test_reg_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_test_mem_reg :: forall e s . Word32 -> Word8 -> CodeGen e s ()
x86_test_membase_reg :: forall e s . Word8 -> Word32 -> Word8 -> CodeGen e s ()
Exchange
x86_cmpxchg_reg_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_cmpxchg_mem_reg :: forall e s . Word32 -> Word8 -> CodeGen e s ()
x86_cmpxchg_membase_reg :: forall e s . Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_xchg_reg_reg :: forall a e s . Num a => Word8 -> Word8 -> a -> CodeGen e s ()
x86_xchg_mem_reg :: forall a e s . Num a => Word32 -> Word8 -> a -> CodeGen e s ()
x86_xchg_membase_reg :: forall a e s . Num a => Word8 -> Word32 -> Word8 -> a -> CodeGen e s ()
String operations
x86_stosb :: CodeGen s e ()
x86_stosl :: CodeGen s e ()
x86_stosd :: CodeGen s e ()
x86_movsb :: CodeGen s e ()
x86_movsl :: CodeGen s e ()
x86_movsd :: CodeGen s e ()
Bitwise shift
x86_shift_reg_imm :: forall e s . Word8 -> Word8 -> Word8 -> CodeGen e s ()
x86_shift_mem_imm :: forall e s . Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_shift_membase_imm :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> CodeGen e s ()
x86_shift_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_shift_mem :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_shift_membase :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_shrd_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_shrd_reg_imm :: forall e s . Word8 -> Word8 -> Word8 -> CodeGen e s ()
x86_shld_reg :: forall e s . Word8 -> Word8 -> CodeGen e s ()
x86_shld_reg_imm :: forall e s . Word8 -> Word8 -> Word8 -> CodeGen e s ()
Conditional move
x86_cmov_membase :: forall e s . Int -> Bool -> Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_cmov_mem :: forall e s . Int -> Bool -> Word8 -> Word32 -> CodeGen e s ()
x86_cmov_reg :: forall e s . Int -> Bool -> Word8 -> Word8 -> CodeGen e s ()
Conditional set
x86_set_membase :: forall e s . Int -> Word8 -> Word32 -> Bool -> CodeGen e s ()
x86_set_mem :: forall e s . Int -> Word32 -> Bool -> CodeGen e s ()
x86_set_reg :: forall e s . Int -> Word8 -> Bool -> CodeGen e s ()
Address calculation
x86_lea_mem :: forall e s . Word8 -> Word32 -> CodeGen e s ()
x86_lea_membase :: forall e s . Word8 -> Word8 -> Word32 -> CodeGen e s ()
x86_lea_memindex :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> CodeGen e s ()
Conversion
x86_cdq :: CodeGen s e ()
x86_widen_memindex :: forall e s . Word8 -> Word8 -> Word32 -> Word8 -> Word8 -> Bool -> Bool -> CodeGen e s ()
x86_widen_membase :: forall e s . Word8 -> Word8 -> Word32 -> Bool -> Bool -> CodeGen e s ()
x86_widen_mem :: forall e s . Word8 -> Word32 -> Bool -> Bool -> CodeGen e s ()
x86_widen_reg :: forall e s . Word8 -> Word8 -> Bool -> Bool -> CodeGen e s ()
Miscellaneous
x86_sahf :: CodeGen s e ()
x86_wait :: CodeGen s e ()
x86_nop :: CodeGen s e ()
x86_breakpoint :: CodeGen s e ()
x86_rdtsc :: CodeGen s e ()
x86_cld :: CodeGen s e ()
Other utilities
negateCC :: Int -> Int
Invert a condition code.
Produced by Haddock version 0.8