| Submitter | Alan Modra |
|---|---|
| Date | Oct. 1, 2010, 3:27 a.m. |
| Message ID | <20101001032712.GE16376@bubble.grove.modra.org> |
| Download | mbox | patch |
| Permalink | /patch/66301/ |
| State | New |
| Headers | show |
Comments
On 09/30/2010 08:27 PM, Alan Modra wrote: > Fixes breakage when building on 64-bit hosts. Committed. > > PR target/45807 > * config/rs6000/rs6000.c (rs6000_emit_prologue): Properly sign > extend toc_restore_insn. > > Index: gcc/config/rs6000/rs6000.c > =================================================================== > --- gcc/config/rs6000/rs6000.c (revision 164818) > +++ gcc/config/rs6000/rs6000.c (working copy) > @@ -20234,8 +20242,8 @@ rs6000_emit_prologue (void) > be updated if we arrived at this function via a plt call or > toc adjusting stub. */ > emit_move_insn (tmp_reg_si, gen_rtx_MEM (SImode, tmp_reg)); > - toc_restore_insn = ((TARGET_32BIT ? 0x80410014 : 0xE8410028) > - ^ 0x80000000) - 0x80000000; > + toc_restore_insn = TARGET_32BIT ? 0x80410014 : 0xE8410028; > + toc_restore_insn = (toc_restore_insn ^ 0x80000000) - 0x80000000; > emit_insn (gen_xorsi3 (tmp_reg_si, tmp_reg_si, > GEN_INT (toc_restore_insn & ~0xffff))); Better, maybe, to use gen_int_mode here instead of the explicit sign-extension trick. r~
Patch
Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (revision 164818) +++ gcc/config/rs6000/rs6000.c (working copy) @@ -20234,8 +20242,8 @@ rs6000_emit_prologue (void) be updated if we arrived at this function via a plt call or toc adjusting stub. */ emit_move_insn (tmp_reg_si, gen_rtx_MEM (SImode, tmp_reg)); - toc_restore_insn = ((TARGET_32BIT ? 0x80410014 : 0xE8410028) - ^ 0x80000000) - 0x80000000; + toc_restore_insn = TARGET_32BIT ? 0x80410014 : 0xE8410028; + toc_restore_insn = (toc_restore_insn ^ 0x80000000) - 0x80000000; emit_insn (gen_xorsi3 (tmp_reg_si, tmp_reg_si, GEN_INT (toc_restore_insn & ~0xffff))); compare_result = gen_rtx_REG (CCUNSmode, CR0_REGNO);