Commit 4e588a4d0e1683488282658c057d4b44976d77d8

Authored by bellard
1 parent a368741b

negative decr fix


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1510 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 6 additions and 3 deletions
hw/ppc.c
@@ -107,13 +107,16 @@ uint32_t cpu_ppc_load_decr (CPUState *env) @@ -107,13 +107,16 @@ uint32_t cpu_ppc_load_decr (CPUState *env)
107 { 107 {
108 ppc_tb_t *tb_env = env->tb_env; 108 ppc_tb_t *tb_env = env->tb_env;
109 uint32_t decr; 109 uint32_t decr;
  110 + int64_t diff;
110 111
111 - decr = muldiv64(tb_env->decr_next - qemu_get_clock(vm_clock),  
112 - tb_env->tb_freq, ticks_per_sec); 112 + diff = tb_env->decr_next - qemu_get_clock(vm_clock);
  113 + if (diff >= 0)
  114 + decr = muldiv64(diff, tb_env->tb_freq, ticks_per_sec);
  115 + else
  116 + decr = -muldiv64(-diff, tb_env->tb_freq, ticks_per_sec);
113 #if defined(DEBUG_TB) 117 #if defined(DEBUG_TB)
114 printf("%s: 0x%08x\n", __func__, decr); 118 printf("%s: 0x%08x\n", __func__, decr);
115 #endif 119 #endif
116 -  
117 return decr; 120 return decr;
118 } 121 }
119 122