x86InstructionSemantics.h File Reference

#include "semanticsModule.h"
#include <cassert>
#include <cstdio>
#include <iostream>
#include "integerOps.h"
#include "AsmUnparser_compat.h"

Include dependency graph for x86InstructionSemantics.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  X86InstructionSemantics< Policy, WordType >
struct  X86InstructionSemantics< Policy, WordType >::Exception

Defines

#define Word(Len)   WordType<(Len)>
#define FLAGCOMBO_ne   policy.invert(readRegister<1>(REG_ZF))
#define FLAGCOMBO_e   readRegister<1>(REG_ZF)
#define FLAGCOMBO_no   policy.invert(readRegister<1>(REG_OF))
#define FLAGCOMBO_o   readRegister<1>(REG_OF)
#define FLAGCOMBO_ns   policy.invert(readRegister<1>(REG_SF))
#define FLAGCOMBO_s   readRegister<1>(REG_SF)
#define FLAGCOMBO_po   policy.invert(readRegister<1>(REG_PF))
#define FLAGCOMBO_pe   readRegister<1>(REG_PF)
#define FLAGCOMBO_ae   policy.invert(readRegister<1>(REG_CF))
#define FLAGCOMBO_b   readRegister<1>(REG_CF)
#define FLAGCOMBO_be   policy.or_(FLAGCOMBO_b, FLAGCOMBO_e)
#define FLAGCOMBO_a   policy.and_(FLAGCOMBO_ae, FLAGCOMBO_ne)
#define FLAGCOMBO_l   policy.xor_(readRegister<1>(REG_SF), readRegister<1>(REG_OF))
#define FLAGCOMBO_ge   policy.invert(policy.xor_(readRegister<1>(REG_SF), readRegister<1>(REG_OF)))
#define FLAGCOMBO_le   policy.or_(FLAGCOMBO_e, FLAGCOMBO_l)
#define FLAGCOMBO_g   policy.and_(FLAGCOMBO_ge, FLAGCOMBO_ne)
#define FLAGCOMBO_cxz   policy.equalToZero(readRegister<16>(REG_CX))
#define FLAGCOMBO_ecxz   policy.equalToZero(readRegister<32>(REG_ECX))
#define JUMP(tag)
#define SET(tag)
#define CMOV(tag)

Functions

static X86SegmentRegister getSegregFromMemoryReference (SgAsmMemoryReferenceExpression *mr)


Define Documentation

#define Word ( Len   )     WordType<(Len)>

#define FLAGCOMBO_ne   policy.invert(readRegister<1>(REG_ZF))

#define FLAGCOMBO_e   readRegister<1>(REG_ZF)

#define FLAGCOMBO_no   policy.invert(readRegister<1>(REG_OF))

#define FLAGCOMBO_o   readRegister<1>(REG_OF)

#define FLAGCOMBO_ns   policy.invert(readRegister<1>(REG_SF))

#define FLAGCOMBO_s   readRegister<1>(REG_SF)

#define FLAGCOMBO_po   policy.invert(readRegister<1>(REG_PF))

#define FLAGCOMBO_pe   readRegister<1>(REG_PF)

#define FLAGCOMBO_ae   policy.invert(readRegister<1>(REG_CF))

#define FLAGCOMBO_b   readRegister<1>(REG_CF)

#define FLAGCOMBO_be   policy.or_(FLAGCOMBO_b, FLAGCOMBO_e)

#define FLAGCOMBO_a   policy.and_(FLAGCOMBO_ae, FLAGCOMBO_ne)

#define FLAGCOMBO_l   policy.xor_(readRegister<1>(REG_SF), readRegister<1>(REG_OF))

#define FLAGCOMBO_ge   policy.invert(policy.xor_(readRegister<1>(REG_SF), readRegister<1>(REG_OF)))

#define FLAGCOMBO_le   policy.or_(FLAGCOMBO_e, FLAGCOMBO_l)

#define FLAGCOMBO_g   policy.and_(FLAGCOMBO_ge, FLAGCOMBO_ne)

#define FLAGCOMBO_cxz   policy.equalToZero(readRegister<16>(REG_CX))

#define FLAGCOMBO_ecxz   policy.equalToZero(readRegister<32>(REG_ECX))

#define JUMP ( tag   ) 

Value:

{                                                                                                 \
                if (operands.size()!=1)                                                                                        \
                    throw Exception("instruction must have one operand", insn);                                                \
                writeRegister(REG_EIP, policy.ite(FLAGCOMBO_##tag,                                                        \
                                                read32(operands[0]),                                                           \
                                                readRegister<32>(REG_EIP)));                                                     \
            }

#define SET ( tag   ) 

Value:

{                                                                                                  \
                if (operands.size()!=1)                                                                                        \
                    throw Exception("instruction must have one operand", insn);                                                \
                write8(operands[0], policy.concat(FLAGCOMBO_##tag, number<7>(0)));                                             \
            }

#define CMOV ( tag   ) 

Value:

{                                                                                                 \
                if (operands.size()!=2)                                                                                        \
                    throw Exception("instruction must have two operands", insn);                                               \
                switch (numBytesInAsmType(operands[0]->get_type())) {                                                          \
                    case 2: write16(operands[0], policy.ite(FLAGCOMBO_##tag, read16(operands[1]), read16(operands[0]))); break; \
                    case 4: write32(operands[0], policy.ite(FLAGCOMBO_##tag, read32(operands[1]), read32(operands[0]))); break; \
                    default: throw Exception("size not implemented", insn);                                                    \
                                                                                                                               \
                }                                                                                                              \
            }


Function Documentation

static X86SegmentRegister getSegregFromMemoryReference ( SgAsmMemoryReferenceExpression mr  )  [inline, static]


Generated on Tue Jan 31 05:32:51 2012 for ROSE by  doxygen 1.4.7