kvm: Conditionally apply workaround for KVM slot handling bug
[qemu] / target-alpha / op_helper.c
index 1d7e3a0..82cb2d9 100644 (file)
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA
  */
 
 #include "exec.h"
@@ -25,7 +25,7 @@
 
 void helper_tb_flush (void)
 {
-    tlb_flush(env, 1);
+    tb_flush(env);
 }
 
 /*****************************************************************************/
@@ -37,32 +37,12 @@ void helper_excp (int excp, int error)
     cpu_loop_exit();
 }
 
-uint64_t helper_amask (uint64_t arg)
-{
-    switch (env->implver) {
-    case IMPLVER_2106x:
-        /* EV4, EV45, LCA, LCA45 & EV5 */
-        break;
-    case IMPLVER_21164:
-    case IMPLVER_21264:
-    case IMPLVER_21364:
-        arg &= ~env->amask;
-        break;
-    }
-    return arg;
-}
-
 uint64_t helper_load_pcc (void)
 {
     /* XXX: TODO */
     return 0;
 }
 
-uint64_t helper_load_implver (void)
-{
-    return env->implver;
-}
-
 uint64_t helper_load_fpcr (void)
 {
     uint64_t ret = 0;
@@ -158,22 +138,22 @@ uint64_t helper_addlv (uint64_t op1, uint64_t op2)
 
 uint64_t helper_subqv (uint64_t op1, uint64_t op2)
 {
-    uint64_t tmp = op1;
-    op1 -= op2;
-    if (unlikely(((~tmp) ^ op1 ^ (-1ULL)) & ((~tmp) ^ op2) & (1ULL << 63))) {
+    uint64_t res;
+    res = op1 - op2;
+    if (unlikely((op1 ^ op2) & (res ^ op1) & (1ULL << 63))) {
         helper_excp(EXCP_ARITH, EXCP_ARITH_OVERFLOW);
     }
-    return op1;
+    return res;
 }
 
 uint64_t helper_sublv (uint64_t op1, uint64_t op2)
 {
-    uint64_t tmp = op1;
-    op1 = (uint32_t)(op1 - op2);
-    if (unlikely(((~tmp) ^ op1 ^ (-1UL)) & ((~tmp) ^ op2) & (1UL << 31))) {
+    uint32_t res;
+    res = op1 - op2;
+    if (unlikely((op1 ^ op2) & (res ^ op1) & (1UL << 31))) {
         helper_excp(EXCP_ARITH, EXCP_ARITH_OVERFLOW);
     }
-    return op1;
+    return res;
 }
 
 uint64_t helper_mullv (uint64_t op1, uint64_t op2)