Commit 2f4011767ba7c0bf604bd4b24d91bc4e00e778fc
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 | ... | ... |