Commit 170e0690 by Michael Meissner

Fix float conversions if sign extension in offset would occur

From-SVN: r12977
parent f37230f0
...@@ -3670,7 +3670,7 @@ ...@@ -3670,7 +3670,7 @@
xop[0] = operands[0]; xop[0] = operands[0];
xop[1] = (frame_pointer_needed) ? frame_pointer_rtx : stack_pointer_rtx; 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); output_asm_insn (\"{cau %0,%2(%1)|addis %0,%1,%2}\", xop);
} }
else if (rs6000_fpmem_offset < 0) else if (rs6000_fpmem_offset < 0)
...@@ -3699,7 +3699,7 @@ ...@@ -3699,7 +3699,7 @@
operands[2] = gen_rtx (MEM, SImode, operands[2] = gen_rtx (MEM, SImode,
gen_rtx (PLUS, Pmode, gen_rtx (PLUS, Pmode,
indx, indx,
GEN_INT ((rs6000_fpmem_offset & 0xffff) GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
+ ((WORDS_BIG_ENDIAN != 0) * 4)))); + ((WORDS_BIG_ENDIAN != 0) * 4))));
return \"{st|stw} %0,%2\"; return \"{st|stw} %0,%2\";
...@@ -3726,7 +3726,7 @@ ...@@ -3726,7 +3726,7 @@
operands[2] = gen_rtx (MEM, SImode, operands[2] = gen_rtx (MEM, SImode,
gen_rtx (PLUS, Pmode, gen_rtx (PLUS, Pmode,
indx, indx,
GEN_INT ((rs6000_fpmem_offset & 0xffff) GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
+ ((WORDS_BIG_ENDIAN == 0) * 4)))); + ((WORDS_BIG_ENDIAN == 0) * 4))));
return \"{st|stw} %0,%2\"; return \"{st|stw} %0,%2\";
...@@ -3746,7 +3746,7 @@ ...@@ -3746,7 +3746,7 @@
if (rs6000_fpmem_offset > 32760) if (rs6000_fpmem_offset > 32760)
{ {
indx = operands[1]; indx = operands[1];
offset &= 0xffff; offset = (((offset & 0xffff) ^ 0x8000) - 0x8000);
} }
else if (frame_pointer_needed) else if (frame_pointer_needed)
indx = frame_pointer_rtx; indx = frame_pointer_rtx;
...@@ -3836,9 +3836,9 @@ ...@@ -3836,9 +3836,9 @@
operands[2] = gen_rtx (MEM, DFmode, operands[2] = gen_rtx (MEM, DFmode,
gen_rtx (PLUS, Pmode, gen_rtx (PLUS, Pmode,
indx, indx,
GEN_INT ((rs6000_fpmem_offset & 0xffff)))); GEN_INT (rs6000_fpmem_offset)));
return \"stfd %0,%2\"; return \"stfd %0,%w2\";
}" }"
[(set_attr "type" "fpstore")]) [(set_attr "type" "fpstore")])
...@@ -3861,7 +3861,7 @@ ...@@ -3861,7 +3861,7 @@
operands[2] = gen_rtx (MEM, DFmode, operands[2] = gen_rtx (MEM, DFmode,
gen_rtx (PLUS, Pmode, gen_rtx (PLUS, Pmode,
indx, indx,
GEN_INT ((rs6000_fpmem_offset & 0xffff) GEN_INT ((((rs6000_fpmem_offset & 0xffff) ^ 0x8000) - 0x8000)
+ ((WORDS_BIG_ENDIAN) ? 4 : 0)))); + ((WORDS_BIG_ENDIAN) ? 4 : 0))));
return \"{l|lwz} %0,%2\"; return \"{l|lwz} %0,%2\";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment