Commit 6fc9dbcc17fc158886131df2cb6d2f190fccf736
1 parent
450e62e7
Fix and improve 64 bit immediate loading
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4946 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
7 additions
and
4 deletions
tcg/ppc64/tcg-target.c
... | ... | @@ -448,15 +448,18 @@ static void tcg_out_movi (TCGContext *s, TCGType type, |
448 | 448 | } |
449 | 449 | else { |
450 | 450 | if ((uint64_t) arg >> 32) { |
451 | + uint16_t h16 = arg >> 16; | |
452 | + uint16_t l16 = arg; | |
453 | + | |
451 | 454 | tcg_out_movi32 (s, ret, (arg >> 32) + (arg32 < 0)); |
452 | 455 | tcg_out_rld (s, RLDICR, ret, ret, 32, 31); |
453 | - if (arg32) { | |
454 | - tcg_out_movi32 (s, 0, arg32); | |
455 | - tcg_out32 (s, ADD | TAB (ret, ret, 0)); | |
456 | - } | |
456 | + if (h16) tcg_out32 (s, ORIS | RS (ret) | RA (ret) | h16); | |
457 | + if (l16) tcg_out32 (s, ORI | RS (ret) | RA (ret) | l16); | |
457 | 458 | } |
458 | 459 | else { |
459 | 460 | tcg_out_movi32 (s, ret, arg32); |
461 | + if (arg32 < 0) | |
462 | + tcg_out_rld (s, RLDICL, ret, ret, 0, 32); | |
460 | 463 | } |
461 | 464 | } |
462 | 465 | } | ... | ... |