@@ -630,18 +630,18 @@ riscv_block_move_straight (rtx dest, rtx src, unsigned HOST_WIDE_INT length,
delta = bits / BITS_PER_UNIT;
/* Allocate a buffer for the temporary registers. */
- regs = XALLOCAVEC (rtx, length / delta);
+ regs = XALLOCAVEC (rtx, length / delta - 1);
/* Load as many BITS-sized chunks as possible. Use a normal load if
the source has enough alignment, otherwise use left/right pairs. */
- for (offset = 0, i = 0; offset + delta <= length; offset += delta, i++)
+ for (offset = 0, i = 0; offset + 2 * delta <= length; offset += delta, i++)
{
regs[i] = gen_reg_rtx (mode);
riscv_emit_move (regs[i], adjust_address (src, mode, offset));
}
/* Copy the chunks to the destination. */
- for (offset = 0, i = 0; offset + delta <= length; offset += delta, i++)
+ for (offset = 0, i = 0; offset + 2 * delta <= length; offset += delta, i++)
riscv_emit_move (adjust_address (dest, mode, offset), regs[i]);
/* Mop up any left-over bytes. */
@@ -91,8 +91,8 @@ COPY_ALIGNED_N(11)
** ...
** sw\t[at][0-9],0\([at][0-9]\)
** ...
-** lbu\t[at][0-9],14\([at][0-9]\)
-** sb\t[at][0-9],14\([at][0-9]\)
+** lw\t[at][0-9],11\([at][0-9]\)
+** sw\t[at][0-9],11\([at][0-9]\)
** ...
*/
COPY_N(15)
@@ -104,8 +104,8 @@ COPY_N(15)
** ...
** sw\t[at][0-9],0\([at][0-9]\)
** ...
-** lbu\t[at][0-9],14\([at][0-9]\)
-** sb\t[at][0-9],14\([at][0-9]\)
+** lw\t[at][0-9],11\([at][0-9]\)
+** sw\t[at][0-9],11\([at][0-9]\)
** ...
*/
COPY_ALIGNED_N(15)
@@ -117,8 +117,8 @@ COPY_ALIGNED_N(15)
** ...
** sw\t[at][0-9],20\([at][0-9]\)
** ...
-** lbu\t[at][0-9],26\([at][0-9]\)
-** sb\t[at][0-9],26\([at][0-9]\)
+** lw\t[at][0-9],23\([at][0-9]\)
+** sw\t[at][0-9],23\([at][0-9]\)
** ...
*/
COPY_N(27)
@@ -130,8 +130,8 @@ COPY_N(27)
** ...
** sw\t[at][0-9],20\([at][0-9]\)
** ...
-** lbu\t[at][0-9],26\([at][0-9]\)
-** sb\t[at][0-9],26\([at][0-9]\)
+** lw\t[at][0-9],23\([at][0-9]\)
+** sw\t[at][0-9],23\([at][0-9]\)
** ...
*/
COPY_ALIGNED_N(27)
@@ -24,10 +24,10 @@ void copy_aligned_##N (void *to, void *from) \
** ...
** lbu\t[at][0-9],0\([at][0-9]\)
** ...
-** lbu\t[at][0-9],6\([at][0-9]\)
-** ...
** sb\t[at][0-9],0\([at][0-9]\)
** ...
+** lbu\t[at][0-9],6\([at][0-9]\)
+** ...
** sb\t[at][0-9],6\([at][0-9]\)
** ...
*/
@@ -50,10 +50,9 @@ COPY_ALIGNED_N(7)
** ...
** lbu\t[at][0-9],0\([at][0-9]\)
** ...
-** lbu\t[at][0-9],7\([at][0-9]\)
-** ...
** sb\t[at][0-9],0\([at][0-9]\)
** ...
+** lbu\t[at][0-9],7\([at][0-9]\)
** sb\t[at][0-9],7\([at][0-9]\)
** ...
*/
@@ -73,10 +72,9 @@ COPY_ALIGNED_N(8)
** ...
** lbu\t[at][0-9],0\([at][0-9]\)
** ...
-** lbu\t[at][0-9],10\([at][0-9]\)
-** ...
** sb\t[at][0-9],0\([at][0-9]\)
** ...
+** lbu\t[at][0-9],10\([at][0-9]\)
** sb\t[at][0-9],10\([at][0-9]\)
** ...
*/
@@ -110,8 +110,8 @@ COPY_ALIGNED_N(15)
** ...
** sd\t[at][0-9],16\([at][0-9]\)
** ...
-** lbu\t[at][0-9],26\([at][0-9]\)
-** sb\t[at][0-9],26\([at][0-9]\)
+** lw\t[at][0-9],23\([at][0-9]\)
+** sw\t[at][0-9],23\([at][0-9]\)
** ...
*/
COPY_N(27)
@@ -123,8 +123,8 @@ COPY_N(27)
** ...
** sd\t[at][0-9],16\([at][0-9]\)
** ...
-** lbu\t[at][0-9],26\([at][0-9]\)
-** sb\t[at][0-9],26\([at][0-9]\)
+** lw\t[at][0-9],23\([at][0-9]\)
+** sw\t[at][0-9],23\([at][0-9]\)
** ...
*/
COPY_ALIGNED_N(27)
@@ -24,10 +24,9 @@ void copy_aligned_##N (void *to, void *from) \
** ...
** lbu\t[at][0-9],0\([at][0-9]\)
** ...
-** lbu\t[at][0-9],6\([at][0-9]\)
-** ...
** sb\t[at][0-9],0\([at][0-9]\)
** ...
+** lbu\t[at][0-9],6\([at][0-9]\)
** sb\t[at][0-9],6\([at][0-9]\)
** ...
*/
@@ -50,10 +49,9 @@ COPY_ALIGNED_N(7)
** ...
** lbu\t[at][0-9],0\([at][0-9]\)
** ...
-** lbu\t[at][0-9],7\([at][0-9]\)
-** ...
** sb\t[at][0-9],0\([at][0-9]\)
** ...
+** lbu\t[at][0-9],7\([at][0-9]\)
** sb\t[at][0-9],7\([at][0-9]\)
** ...
*/
@@ -73,10 +71,9 @@ COPY_ALIGNED_N(8)
** ...
** lbu\t[at][0-9],0\([at][0-9]\)
** ...
-** lbu\t[at][0-9],10\([at][0-9]\)
-** ...
** sb\t[at][0-9],0\([at][0-9]\)
** ...
+** lbu\t[at][0-9],10\([at][0-9]\)
** sb\t[at][0-9],10\([at][0-9]\)
** ...
*/