]> git.proxmox.com Git - qemu.git/blobdiff - ops_template.h
fixed popf TF flag bug (should never hapen in user code except in test-i386!)
[qemu.git] / ops_template.h
index 60223fb2fffed103896fb6b54bc15039633c9bb2..7adf7be6a73e76b23e63a5dadb6a028a1ff62821 100644 (file)
@@ -204,8 +204,13 @@ static int glue(compute_all_shl, SUFFIX)(void)
     return cf | pf | af | zf | sf | of;
 }
 
-#if DATA_BITS == 32
 static int glue(compute_c_shl, SUFFIX)(void)
+{
+    return (CC_SRC >> (DATA_BITS - 1)) & CC_C;
+}
+
+#if DATA_BITS == 32
+static int glue(compute_c_sar, SUFFIX)(void)
 {
     return CC_SRC & 1;
 }
@@ -609,6 +614,7 @@ void OPPROTO glue(glue(op_shld, SUFFIX), _T0_T1_ECX_cc)(void)
         CC_DST = T0;
         CC_OP = CC_OP_SARB + SHIFT;
     }
+    FORCE_RET();
 }
 
 void OPPROTO glue(glue(op_shrd, SUFFIX), _T0_T1_im_cc)(void)
@@ -643,6 +649,7 @@ void OPPROTO glue(glue(op_shrd, SUFFIX), _T0_T1_ECX_cc)(void)
         CC_DST = T0;
         CC_OP = CC_OP_SARB + SHIFT;
     }
+    FORCE_RET();
 }
 #endif
 
@@ -670,6 +677,7 @@ void OPPROTO glue(glue(op_shld, SUFFIX), _T0_T1_ECX_cc)(void)
         CC_DST = T0;
         CC_OP = CC_OP_SHLB + SHIFT;
     }
+    FORCE_RET();
 }
 
 void OPPROTO glue(glue(op_shrd, SUFFIX), _T0_T1_im_cc)(void)
@@ -696,6 +704,7 @@ void OPPROTO glue(glue(op_shrd, SUFFIX), _T0_T1_ECX_cc)(void)
         CC_DST = T0;
         CC_OP = CC_OP_SARB + SHIFT;
     }
+    FORCE_RET();
 }
 #endif
 
@@ -839,12 +848,12 @@ void OPPROTO glue(glue(op_bsr, SUFFIX), _T0_cc)(void)
 
 void OPPROTO glue(glue(op_out, SUFFIX), _T0_T1)(void)
 {
-    glue(cpu_x86_out, SUFFIX)(T0 & 0xffff, T1 & DATA_MASK);
+    glue(cpu_x86_out, SUFFIX)(env, T0 & 0xffff, T1 & DATA_MASK);
 }
 
 void OPPROTO glue(glue(op_in, SUFFIX), _T0_T1)(void)
 {
-    T1 = glue(cpu_x86_in, SUFFIX)(T0 & 0xffff);
+    T1 = glue(cpu_x86_in, SUFFIX)(env, T0 & 0xffff);
 }
 
 #undef DATA_BITS