From: Matthew Fortune <matthew.fort...@imgtec.com> gcc/ * config/mips/mips.cc (mips_output_move): Mark unaligned load and store with a comment.
Cherry-picked 42be7aa50f3b04a88768e08c000cfe7923f22b0f from https://github.com/MIPS/gcc Signed-off-by: Matthew Fortune <matthew.fort...@imgtec.com> Signed-off-by: Faraz Shahbazker <fshahbaz...@wavecomp.com> Signed-off-by: Aleksandar Rakic <aleksandar.ra...@htecgroup.com> --- gcc/config/mips/mips.cc | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index a1208bcef69..dcb4b9f9f99 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -6255,9 +6255,15 @@ mips_output_move (rtx insn, rtx dest, rtx src) switch (GET_MODE_SIZE (mode)) { case 1: return "sb\t%z1,%0"; - case 2: return "sh\t%z1,%0"; - case 4: return "sw\t%z1,%0"; - case 8: return "sd\t%z1,%0"; + case 2: return ((MEM_ALIGN (dest) >= BITS_PER_UNIT * 2) + ? "sh\t%z1,%0" + : "sh\t%z1,%0 # unaligned"); + case 4: return ((MEM_ALIGN (dest) >= BITS_PER_UNIT * 4) + ? "sw\t%z1,%0" + : "sw\t%z1,%0 # unaligned"); + case 8: return ((MEM_ALIGN (dest) >= BITS_PER_UNIT * 8) + ? "sd\t%z1,%0" + : "sd\t%z1,%0 # unaligned"); default: gcc_unreachable (); } } @@ -6313,18 +6319,30 @@ mips_output_move (rtx insn, rtx dest, rtx src) switch (GET_MODE_SIZE (mode)) { case 1: return "lbu\t$0,%1"; - case 2: return "lhu\t$0,%1"; - case 4: return "lw\t$0,%1"; - case 8: return "ld\t$0,%1"; + case 2: return ((MEM_ALIGN (src) >= BITS_PER_UNIT * 2) + ? "lhu\t$0,%1" + : "lhu\t$0,%1 # unaligned"); + case 4: return ((MEM_ALIGN (src) >= BITS_PER_UNIT * 4) + ? "lw\t$0,%1" + : "lw\t$0,%1 # unaligned"); + case 8: return ((MEM_ALIGN (src) >= BITS_PER_UNIT * 8) + ? "ld\t$0,%1" + : "ld\t$0,%1 # unaligned"); default: gcc_unreachable (); } else switch (GET_MODE_SIZE (mode)) { case 1: return "lbu\t%0,%1"; - case 2: return "lhu\t%0,%1"; - case 4: return "lw\t%0,%1"; - case 8: return "ld\t%0,%1"; + case 2: return ((MEM_ALIGN (src) >= BITS_PER_UNIT * 2) + ? "lhu\t%0,%1" + : "lhu\t%0,%1 # unaligned"); + case 4: return ((MEM_ALIGN (src) >= BITS_PER_UNIT * 4) + ? "lw\t%0,%1" + : "lw\t%0,%1 # unaligned"); + case 8: return ((MEM_ALIGN (src) >= BITS_PER_UNIT * 8) + ? "ld\t%0,%1" + : "ld\t%0,%1 # unaligned"); default: gcc_unreachable (); } } -- 2.34.1