tun-fd fix
[qemu] / exec-all.h
index a14efa9..bc16be1 100644 (file)
@@ -141,7 +141,7 @@ int tlb_set_page(CPUState *env, uint32_t vaddr, uint32_t paddr, int prot,
 #if defined(__powerpc__) 
 #define USE_DIRECT_JUMP
 #endif
-#if defined(__i386__) 
+#if defined(__i386__) && !defined(_WIN32)
 #define USE_DIRECT_JUMP
 #endif
 
@@ -152,7 +152,9 @@ typedef struct TranslationBlock {
     uint16_t size;      /* size of target code for this block (1 <=
                            size <= TARGET_PAGE_SIZE) */
     uint16_t cflags;    /* compile flags */
-#define CF_CODE_COPY  0x0001 /* block was generated in code copy mode */
+#define CF_CODE_COPY   0x0001 /* block was generated in code copy mode */
+#define CF_TB_FP_USED  0x0002 /* fp ops are used in the TB */
+#define CF_FP_USED     0x0004 /* fp ops are used in the TB or in a chained TB */
 
     uint8_t *tc_ptr;    /* pointer to the translated code */
     struct TranslationBlock *hash_next; /* next matching tb for virtual address */
@@ -320,13 +322,19 @@ do {\
 
 #elif defined(__i386__) && defined(USE_DIRECT_JUMP)
 
+#ifdef _WIN32
+#define ASM_PREVIOUS_SECTION ".section .text\n"
+#else
+#define ASM_PREVIOUS_SECTION ".previous\n"
+#endif
+
 /* we patch the jump instruction directly */
 #define JUMP_TB(opname, tbparam, n, eip)\
 do {\
-    asm volatile (".section \".data\"\n"\
+    asm volatile (".section .data\n"\
                  "__op_label" #n "." stringify(opname) ":\n"\
                  ".long 1f\n"\
-                 ".previous\n"\
+                 ASM_PREVIOUS_SECTION \
                   "jmp __op_jmp" #n "\n"\
                  "1:\n");\
     T0 = (long)(tbparam) + (n);\
@@ -398,6 +406,20 @@ static inline int testandset (int *p)
 }
 #endif
 
+#ifdef __x86_64__
+static inline int testandset (int *p)
+{
+    char ret;
+    int readval;
+    
+    __asm__ __volatile__ ("lock; cmpxchgl %3, %1; sete %0"
+                          : "=q" (ret), "=m" (*p), "=a" (readval)
+                          : "r" (1), "m" (*p), "a" (0)
+                          : "memory");
+    return ret;
+}
+#endif
+
 #ifdef __s390__
 static inline int testandset (int *p)
 {