Commit 90cbed4656108fec86d157ced39192e0774a6615

Authored by blueswir1
1 parent bffe1431

Fix 32 bit address overflow

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5019 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 19 additions and 0 deletions
tcg/sparc/tcg-target.c
... ... @@ -625,8 +625,18 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args,
625 625 /* ld [arg1 + x], arg1 */
626 626 tcg_out_ldst(s, arg1, arg1, offsetof(CPUTLBEntry, addend) -
627 627 offsetof(CPUTLBEntry, addr_read), HOST_LD_OP);
  628 +
  629 +#if TARGET_LONG_BITS == 32
  630 + /* and addr_reg, x, arg0 */
  631 + tcg_out_movi(s, TCG_TYPE_I32, TCG_REG_I5, 0xffffffff);
  632 + tcg_out_arith(s, arg0, addr_reg, TCG_REG_I5, ARITH_AND);
  633 + /* add arg0, arg1, arg0 */
  634 + tcg_out_arith(s, arg0, arg0, arg1, ARITH_ADD);
  635 +#else
628 636 /* add addr_reg, arg1, arg0 */
629 637 tcg_out_arith(s, arg0, addr_reg, arg1, ARITH_ADD);
  638 +#endif
  639 +
630 640 #else
631 641 arg0 = addr_reg;
632 642 #endif
... ... @@ -785,8 +795,17 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args,
785 795 tcg_out_ldst(s, arg1, arg1, offsetof(CPUTLBEntry, addend) -
786 796 offsetof(CPUTLBEntry, addr_write), HOST_LD_OP);
787 797  
  798 +#if TARGET_LONG_BITS == 32
  799 + /* and addr_reg, x, arg0 */
  800 + tcg_out_movi(s, TCG_TYPE_I32, TCG_REG_I5, 0xffffffff);
  801 + tcg_out_arith(s, arg0, addr_reg, TCG_REG_I5, ARITH_AND);
  802 + /* add arg0, arg1, arg0 */
  803 + tcg_out_arith(s, arg0, arg0, arg1, ARITH_ADD);
  804 +#else
788 805 /* add addr_reg, arg1, arg0 */
789 806 tcg_out_arith(s, arg0, addr_reg, arg1, ARITH_ADD);
  807 +#endif
  808 +
790 809 #else
791 810 arg0 = addr_reg;
792 811 #endif
... ...