Commit 0cadcbbe6595e77ef50c5f50a2f064a37f3da698

Authored by aurel32
1 parent 5bf06a95

target-ppc: fix computation of XER.{CA, OV} in addme, subfme

(Jocelyn Mayer)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5380 c046a42c-6fe2-441c-8c8c-71466251a162
target-ppc/op.c
@@ -640,8 +640,6 @@ void OPPROTO op_add_me (void) @@ -640,8 +640,6 @@ void OPPROTO op_add_me (void)
640 T0 += xer_ca + (-1); 640 T0 += xer_ca + (-1);
641 if (likely((uint32_t)T1 != 0)) 641 if (likely((uint32_t)T1 != 0))
642 xer_ca = 1; 642 xer_ca = 1;
643 - else  
644 - xer_ca = 0;  
645 RETURN(); 643 RETURN();
646 } 644 }
647 645
@@ -651,8 +649,6 @@ void OPPROTO op_add_me_64 (void) @@ -651,8 +649,6 @@ void OPPROTO op_add_me_64 (void)
651 T0 += xer_ca + (-1); 649 T0 += xer_ca + (-1);
652 if (likely((uint64_t)T1 != 0)) 650 if (likely((uint64_t)T1 != 0))
653 xer_ca = 1; 651 xer_ca = 1;
654 - else  
655 - xer_ca = 0;  
656 RETURN(); 652 RETURN();
657 } 653 }
658 #endif 654 #endif
@@ -930,8 +926,6 @@ void OPPROTO op_subfme (void) @@ -930,8 +926,6 @@ void OPPROTO op_subfme (void)
930 T0 = ~T0 + xer_ca - 1; 926 T0 = ~T0 + xer_ca - 1;
931 if (likely((uint32_t)T0 != UINT32_MAX)) 927 if (likely((uint32_t)T0 != UINT32_MAX))
932 xer_ca = 1; 928 xer_ca = 1;
933 - else  
934 - xer_ca = 0;  
935 RETURN(); 929 RETURN();
936 } 930 }
937 931
@@ -941,8 +935,6 @@ void OPPROTO op_subfme_64 (void) @@ -941,8 +935,6 @@ void OPPROTO op_subfme_64 (void)
941 T0 = ~T0 + xer_ca - 1; 935 T0 = ~T0 + xer_ca - 1;
942 if (likely((uint64_t)T0 != UINT64_MAX)) 936 if (likely((uint64_t)T0 != UINT64_MAX))
943 xer_ca = 1; 937 xer_ca = 1;
944 - else  
945 - xer_ca = 0;  
946 RETURN(); 938 RETURN();
947 } 939 }
948 #endif 940 #endif
target-ppc/op_helper.c
@@ -151,10 +151,8 @@ void do_addmeo (void) @@ -151,10 +151,8 @@ void do_addmeo (void)
151 T0 += xer_ca + (-1); 151 T0 += xer_ca + (-1);
152 xer_ov = ((uint32_t)T1 & ((uint32_t)T1 ^ (uint32_t)T0)) >> 31; 152 xer_ov = ((uint32_t)T1 & ((uint32_t)T1 ^ (uint32_t)T0)) >> 31;
153 xer_so |= xer_ov; 153 xer_so |= xer_ov;
154 - if (likely(T1 != 0)) 154 + if (likely((uint32_t)T1 != 0))
155 xer_ca = 1; 155 xer_ca = 1;
156 - else  
157 - xer_ca = 0;  
158 } 156 }
159 157
160 #if defined(TARGET_PPC64) 158 #if defined(TARGET_PPC64)
@@ -164,10 +162,8 @@ void do_addmeo_64 (void) @@ -164,10 +162,8 @@ void do_addmeo_64 (void)
164 T0 += xer_ca + (-1); 162 T0 += xer_ca + (-1);
165 xer_ov = ((uint64_t)T1 & ((uint64_t)T1 ^ (uint64_t)T0)) >> 63; 163 xer_ov = ((uint64_t)T1 & ((uint64_t)T1 ^ (uint64_t)T0)) >> 63;
166 xer_so |= xer_ov; 164 xer_so |= xer_ov;
167 - if (likely(T1 != 0)) 165 + if (likely((uint64_t)T1 != 0))
168 xer_ca = 1; 166 xer_ca = 1;
169 - else  
170 - xer_ca = 0;  
171 } 167 }
172 #endif 168 #endif
173 169
@@ -312,8 +308,6 @@ void do_subfmeo (void) @@ -312,8 +308,6 @@ void do_subfmeo (void)
312 xer_so |= xer_ov; 308 xer_so |= xer_ov;
313 if (likely((uint32_t)T1 != UINT32_MAX)) 309 if (likely((uint32_t)T1 != UINT32_MAX))
314 xer_ca = 1; 310 xer_ca = 1;
315 - else  
316 - xer_ca = 0;  
317 } 311 }
318 312
319 #if defined(TARGET_PPC64) 313 #if defined(TARGET_PPC64)
@@ -325,8 +319,6 @@ void do_subfmeo_64 (void) @@ -325,8 +319,6 @@ void do_subfmeo_64 (void)
325 xer_so |= xer_ov; 319 xer_so |= xer_ov;
326 if (likely((uint64_t)T1 != UINT64_MAX)) 320 if (likely((uint64_t)T1 != UINT64_MAX))
327 xer_ca = 1; 321 xer_ca = 1;
328 - else  
329 - xer_ca = 0;  
330 } 322 }
331 #endif 323 #endif
332 324