Skip to content

Commit 0c00523

Browse files
committed
Merge branch 'fix/newlib-asm-inlining-issue' into 'master'
fix(newlib): fix riscv asm inlining for mem functions See merge request espressif/esp-idf!41623
2 parents a3bf1b1 + 3d056ad commit 0c00523

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

components/esp_libc/src/port/riscv/memcpy.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ memcpy(void *__restrict aa, const void *__restrict bb, size_t n)
134134
"addi %1, %1, 4\n" // lb++;
135135
"addi %2, %2, 4\n" // la++;
136136
"sw %0, -4(%2)\n" // *(la-1) = src0;
137-
: "=r"(src0), "+r"(lb), "+r"(la)
137+
: "=&r"(src0), "+r"(lb), "+r"(la)
138138
:: "memory");
139139
}
140140

components/esp_libc/src/port/riscv/memmove.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ memmove(void *dst_void,
4545
"addi %2, %2, -4\n" // aligned_dst--;
4646
"addi %3, %3, -4\n" // length -= LITTLE_BLOCK_SIZE;
4747
"sw %0, 0(%2)\n" // aligned_dst = src0;
48-
: "=r"(src0), "+r"(aligned_src), "+r"(aligned_dst), "+r"(length)
48+
: "=&r"(src0), "+r"(aligned_src), "+r"(aligned_dst), "+r"(length)
4949
:: "memory");
5050
}
5151

@@ -122,13 +122,13 @@ memmove(void *dst_void,
122122
*/
123123
long src0;
124124
/* DIG-694: need at least 2 instructions between lw and sw */
125-
asm volatile("lw %0, 0(%4)\n" // long src0 = *aligned_src;
126-
"addi %1, %4, 4\n" // aligned_src++;
127-
"addi %2, %5, 4\n" // aligned_dst++;
128-
"addi %3, %6, -4\n" // length -= LITTLE_BLOCK_SIZE;
129-
"sw %0, -4(%5)\n" // *(aligned_dst-1) = src0;
130-
: "=r"(src0), "=r"(aligned_src), "=r"(aligned_dst), "=r"(length)
131-
: "r"(aligned_src), "r"(aligned_dst), "r"(length));
125+
asm volatile("lw %0, 0(%1)\n" // long src0 = *aligned_src;
126+
"addi %1, %1, 4\n" // aligned_src++;
127+
"addi %2, %2, 4\n" // aligned_dst++;
128+
"addi %3, %3, -4\n" // length -= LITTLE_BLOCK_SIZE;
129+
"sw %0, -4(%2)\n" // *(aligned_dst-1) = src0;
130+
: "=&r"(src0), "+r"(aligned_src), "+r"(aligned_dst), "+r"(length)
131+
:: "memory");
132132
}
133133

134134
/* Pick up any residual with a byte copier. */

0 commit comments

Comments
 (0)