--- upstream/dynamips-0.2.7-RC2/utils.h 2007/10/06 16:24:54 8 +++ trunk/utils.h 2007/10/06 16:45:40 12 @@ -12,6 +12,8 @@ #include #include #include +#include +#include /* True/False definitions */ #ifndef FALSE @@ -22,6 +24,20 @@ #define TRUE 1 #endif +/* Host CPU Types */ +#define CPU_x86 0 +#define CPU_amd64 1 +#define CPU_nojit 2 + +/* Number of host registers available for JIT */ +#if JIT_CPU == CPU_x86 +#define JIT_HOST_NREG 8 +#elif JIT_CPU == CPU_amd64 +#define JIT_HOST_NREG 16 +#else +#define JIT_HOST_NREG 0 +#endif + /* Endianness */ #define ARCH_BIG_ENDIAN 0x4321 #define ARCH_LITTLE_ENDIAN 0x1234 @@ -36,6 +52,8 @@ #define ARCH_BYTE_ORDER ARCH_LITTLE_ENDIAN #elif defined(__x86_64__) #define ARCH_BYTE_ORDER ARCH_LITTLE_ENDIAN +#elif defined(__ia64__) +#define ARCH_BYTE_ORDER ARCH_LITTLE_ENDIAN #endif #ifndef ARCH_BYTE_ORDER @@ -75,7 +93,7 @@ #if __GNUC__ > 2 /* http://kerneltrap.org/node/4705 */ -#define likely(x) __builtin_expect((x),1) +#define likely(x) __builtin_expect(!!(x),1) #define unlikely(x) __builtin_expect((x),0) #else #define likely(x) (x) @@ -99,9 +117,12 @@ typedef m_uint64_t m_tmcnt_t; /* Forward declarations */ +typedef struct cpu_gen cpu_gen_t; typedef struct vm_instance vm_instance_t; +typedef struct vm_platform vm_platform_t; typedef struct mips64_jit_tcb mips64_jit_tcb_t; typedef struct ppc32_jit_tcb ppc32_jit_tcb_t; +typedef struct jit_op jit_op_t; /* Translated block function pointer */ typedef void (*insn_tblock_fptr)(void); @@ -151,6 +172,7 @@ m_uint64_t len; m_uint32_t cached; m_uint32_t tlb_index; + m_uint32_t offset; }mts_map_t; /* Invalid VTLB entry */ @@ -179,6 +201,16 @@ m_uint32_t flags; /* Flags */ }__attribute__ ((aligned(16))); +/* Host register allocation */ +#define HREG_FLAG_ALLOC_LOCKED 1 +#define HREG_FLAG_ALLOC_FORCED 2 + +struct hreg_map { + int hreg,vreg; + int flags; + struct hreg_map *prev,*next; +}; + /* Global logfile */ extern FILE *log_file; @@ -325,7 +357,7 @@ char *m_fgets(char *buffer,int size,FILE *fd); /* Read a file and returns it in a buffer */ -ssize_t m_read_file(char *filename,char **buffer); +ssize_t m_read_file(char *filename,u_char **buffer); /* Allocate aligned memory */ void *m_memalign(size_t boundary,size_t size);