Fix float conversions if sign extension in offset would occur

From-SVN: r12977
This commit is contained in:
Michael Meissner 1996-10-18 17:35:40 +00:00
parent f37230f0b4
commit 170e0690ee

View File

@ -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\";