X-Git-Url: https://gcc.gnu.org/git/?a=blobdiff_plain;f=gcc%2Fconfig%2Frs6000%2Frs6000.md;h=382a0a79abda763f1b01a37acb85838b4dcec924;hb=170e0690ee57c42c1805f5d7e31f29c94b97ea91;hp=9c93f9b3ec55bd43f8416398a943681b69fd38fa;hpb=f37230f0b482fc057ba2dc7d9fbdb2bec90ba19e;p=gcc.git diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 9c93f9b3ec55..382a0a79abda 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\";