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 180 #if 0 // unused
181 181 void OPPROTO op_set_T2 (void)
182 182 {
183   - T2 = PARAM1;
  183 + T2 = (uint32_t)PARAM1;
184 184 RETURN();
185 185 }
186 186 #endif
... ... @@ -572,7 +572,7 @@ void OPPROTO op_getbit_T1 (void)
572 572  
573 573 void OPPROTO op_setcrfbit (void)
574 574 {
575   - T1 = (T1 & PARAM1) | (T0 << PARAM2);
  575 + T1 = (T1 & (uint32_t)PARAM1) | (T0 << PARAM2);
576 576 RETURN();
577 577 }
578 578  
... ... @@ -1146,7 +1146,7 @@ void OPPROTO op_subfic (void)
1146 1146 #if defined(TARGET_PPC64)
1147 1147 void OPPROTO op_subfic_64 (void)
1148 1148 {
1149   - T0 = PARAM1 + ~T0 + 1;
  1149 + T0 = (int64_t)PARAM1 + ~T0 + 1;
1150 1150 if ((uint64_t)T0 <= (uint64_t)PARAM1) {
1151 1151 xer_ca = 1;
1152 1152 } else {
... ... @@ -1388,26 +1388,26 @@ void OPPROTO op_andc (void)
1388 1388 /* andi. */
1389 1389 void OPPROTO op_andi_T0 (void)
1390 1390 {
1391   - T0 &= PARAM1;
  1391 + T0 &= (uint32_t)PARAM1;
1392 1392 RETURN();
1393 1393 }
1394 1394  
1395 1395 void OPPROTO op_andi_T1 (void)
1396 1396 {
1397   - T1 &= PARAM1;
  1397 + T1 &= (uint32_t)PARAM1;
1398 1398 RETURN();
1399 1399 }
1400 1400  
1401 1401 #if defined(TARGET_PPC64)
1402 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 1405 RETURN();
1406 1406 }
1407 1407  
1408 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 1411 RETURN();
1412 1412 }
1413 1413 #endif
... ... @@ -1496,7 +1496,7 @@ void OPPROTO op_orc (void)
1496 1496 /* ori */
1497 1497 void OPPROTO op_ori (void)
1498 1498 {
1499   - T0 |= PARAM1;
  1499 + T0 |= (uint32_t)PARAM1;
1500 1500 RETURN();
1501 1501 }
1502 1502  
... ... @@ -1510,7 +1510,7 @@ void OPPROTO op_xor (void)
1510 1510 /* xori */
1511 1511 void OPPROTO op_xori (void)
1512 1512 {
1513   - T0 ^= PARAM1;
  1513 + T0 ^= (uint32_t)PARAM1;
1514 1514 RETURN();
1515 1515 }
1516 1516  
... ... @@ -2229,7 +2229,7 @@ void OPPROTO op_POWER_nabso (void)
2229 2229 void OPPROTO op_POWER_rlmi (void)
2230 2230 {
2231 2231 T0 = rotl32(T0, T2) & PARAM1;
2232   - T0 |= T1 & PARAM2;
  2232 + T0 |= T1 & (uint32_t)PARAM2;
2233 2233 RETURN();
2234 2234 }
2235 2235  
... ...