From 170e0690ee57c42c1805f5d7e31f29c94b97ea91 Mon Sep 17 00:00:00 2001 From: Michael Meissner Date: Fri, 18 Oct 1996 17:35:40 +0000 Subject: Fix float conversions if sign extension in offset would occur From-SVN: r12977 --- gcc/config/rs6000/rs6000.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'gcc') diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 9c93f9b..382a0a7 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -3670,7 +3670,7 @@ xop[0] = operands[0]; xop[1] = (frame_pointer_needed) ? frame_pointer_rtx : stack_pointer_rtx; - xop[2] = GEN_INT ((rs6000_fpmem_offset >> 16) & 0xffff); + xop[2] = GEN_INT ((rs6000_fpmem_offset >> 16) + ((rs6000_fpmem_offset & 0x8000) >> 15)); output_asm_insn (\"{cau %0,%2(%1)|addis %0,%1,%2}\", xop); } else if (rs6000_fpmem_offset < 0) @@ -3699,7 +3699,7 @@ operands[2] = gen_rtx (MEM, SImode, gen_rtx (PLUS, Pmode, indx, - GEN_INT ((rs6000_fpmem_offset & 0xffff) + GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000) + ((WORDS_BIG_ENDIAN != 0) * 4)))); return \"{st|stw} %0,%2\"; @@ -3726,7 +3726,7 @@ operands[2] = gen_rtx (MEM, SImode, gen_rtx (PLUS, Pmode, indx, - GEN_INT ((rs6000_fpmem_offset & 0xffff) + GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000) + ((WORDS_BIG_ENDIAN == 0) * 4)))); return \"{st|stw} %0,%2\"; @@ -3746,7 +3746,7 @@ if (rs6000_fpmem_offset > 32760) { indx = operands[1]; - offset &= 0xffff; + offset = (((offset & 0xffff) ^ 0x8000) - 0x8000); } else if (frame_pointer_needed) indx = frame_pointer_rtx; @@ -3836,9 +3836,9 @@ operands[2] = gen_rtx (MEM, DFmode, gen_rtx (PLUS, Pmode, indx, - GEN_INT ((rs6000_fpmem_offset & 0xffff)))); + GEN_INT (rs6000_fpmem_offset))); - return \"stfd %0,%2\"; + return \"stfd %0,%w2\"; }" [(set_attr "type" "fpstore")]) @@ -3861,7 +3861,7 @@ operands[2] = gen_rtx (MEM, DFmode, gen_rtx (PLUS, Pmode, indx, - GEN_INT ((rs6000_fpmem_offset & 0xffff) + GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000) + ((WORDS_BIG_ENDIAN) ? 4 : 0)))); return \"{l|lwz} %0,%2\"; -- cgit v1.1