Commit 2f4011767ba7c0bf604bd4b24d91bc4e00e778fc

Authored by j_mayer
1 parent a97fed52

Fix nasty sign-extensions when running 32 bits CPU in the 64 bits emulator

on 32 bits hosts.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3312 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 10 additions and 10 deletions
target-ppc/op.c
@@ -180,7 +180,7 @@ void OPPROTO op_set_T1_64 (void) @@ -180,7 +180,7 @@ void OPPROTO op_set_T1_64 (void)
180 #if 0 // unused 180 #if 0 // unused
181 void OPPROTO op_set_T2 (void) 181 void OPPROTO op_set_T2 (void)
182 { 182 {
183 - T2 = PARAM1; 183 + T2 = (uint32_t)PARAM1;
184 RETURN(); 184 RETURN();
185 } 185 }
186 #endif 186 #endif
@@ -572,7 +572,7 @@ void OPPROTO op_getbit_T1 (void) @@ -572,7 +572,7 @@ void OPPROTO op_getbit_T1 (void)
572 572
573 void OPPROTO op_setcrfbit (void) 573 void OPPROTO op_setcrfbit (void)
574 { 574 {
575 - T1 = (T1 & PARAM1) | (T0 << PARAM2); 575 + T1 = (T1 & (uint32_t)PARAM1) | (T0 << PARAM2);
576 RETURN(); 576 RETURN();
577 } 577 }
578 578
@@ -1146,7 +1146,7 @@ void OPPROTO op_subfic (void) @@ -1146,7 +1146,7 @@ void OPPROTO op_subfic (void)
1146 #if defined(TARGET_PPC64) 1146 #if defined(TARGET_PPC64)
1147 void OPPROTO op_subfic_64 (void) 1147 void OPPROTO op_subfic_64 (void)
1148 { 1148 {
1149 - T0 = PARAM1 + ~T0 + 1; 1149 + T0 = (int64_t)PARAM1 + ~T0 + 1;
1150 if ((uint64_t)T0 <= (uint64_t)PARAM1) { 1150 if ((uint64_t)T0 <= (uint64_t)PARAM1) {
1151 xer_ca = 1; 1151 xer_ca = 1;
1152 } else { 1152 } else {
@@ -1388,26 +1388,26 @@ void OPPROTO op_andc (void) @@ -1388,26 +1388,26 @@ void OPPROTO op_andc (void)
1388 /* andi. */ 1388 /* andi. */
1389 void OPPROTO op_andi_T0 (void) 1389 void OPPROTO op_andi_T0 (void)
1390 { 1390 {
1391 - T0 &= PARAM1; 1391 + T0 &= (uint32_t)PARAM1;
1392 RETURN(); 1392 RETURN();
1393 } 1393 }
1394 1394
1395 void OPPROTO op_andi_T1 (void) 1395 void OPPROTO op_andi_T1 (void)
1396 { 1396 {
1397 - T1 &= PARAM1; 1397 + T1 &= (uint32_t)PARAM1;
1398 RETURN(); 1398 RETURN();
1399 } 1399 }
1400 1400
1401 #if defined(TARGET_PPC64) 1401 #if defined(TARGET_PPC64)
1402 void OPPROTO op_andi_T0_64 (void) 1402 void OPPROTO op_andi_T0_64 (void)
1403 { 1403 {
1404 - T0 &= ((uint64_t)PARAM1 << 32) | PARAM2; 1404 + T0 &= ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
1405 RETURN(); 1405 RETURN();
1406 } 1406 }
1407 1407
1408 void OPPROTO op_andi_T1_64 (void) 1408 void OPPROTO op_andi_T1_64 (void)
1409 { 1409 {
1410 - T1 &= ((uint64_t)PARAM1 << 32) | PARAM2; 1410 + T1 &= ((uint64_t)PARAM1 << 32) | (uint64_t)PARAM2;
1411 RETURN(); 1411 RETURN();
1412 } 1412 }
1413 #endif 1413 #endif
@@ -1496,7 +1496,7 @@ void OPPROTO op_orc (void) @@ -1496,7 +1496,7 @@ void OPPROTO op_orc (void)
1496 /* ori */ 1496 /* ori */
1497 void OPPROTO op_ori (void) 1497 void OPPROTO op_ori (void)
1498 { 1498 {
1499 - T0 |= PARAM1; 1499 + T0 |= (uint32_t)PARAM1;
1500 RETURN(); 1500 RETURN();
1501 } 1501 }
1502 1502
@@ -1510,7 +1510,7 @@ void OPPROTO op_xor (void) @@ -1510,7 +1510,7 @@ void OPPROTO op_xor (void)
1510 /* xori */ 1510 /* xori */
1511 void OPPROTO op_xori (void) 1511 void OPPROTO op_xori (void)
1512 { 1512 {
1513 - T0 ^= PARAM1; 1513 + T0 ^= (uint32_t)PARAM1;
1514 RETURN(); 1514 RETURN();
1515 } 1515 }
1516 1516
@@ -2229,7 +2229,7 @@ void OPPROTO op_POWER_nabso (void) @@ -2229,7 +2229,7 @@ void OPPROTO op_POWER_nabso (void)
2229 void OPPROTO op_POWER_rlmi (void) 2229 void OPPROTO op_POWER_rlmi (void)
2230 { 2230 {
2231 T0 = rotl32(T0, T2) & PARAM1; 2231 T0 = rotl32(T0, T2) & PARAM1;
2232 - T0 |= T1 & PARAM2; 2232 + T0 |= T1 & (uint32_t)PARAM2;
2233 RETURN(); 2233 RETURN();
2234 } 2234 }
2235 2235