mirror of
https://github.com/espressif/esp-idf.git
synced 2025-10-02 18:10:57 +02:00
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
This commit is contained in:
@@ -134,7 +134,7 @@ small:
|
|||||||
"addi %1, %1, 4\n" // lb++;
|
"addi %1, %1, 4\n" // lb++;
|
||||||
"addi %2, %2, 4\n" // la++;
|
"addi %2, %2, 4\n" // la++;
|
||||||
"sw %0, -4(%2)\n" // *(la-1) = src0;
|
"sw %0, -4(%2)\n" // *(la-1) = src0;
|
||||||
: "=r"(src0), "+r"(lb), "+r"(la)
|
: "=&r"(src0), "+r"(lb), "+r"(la)
|
||||||
:: "memory");
|
:: "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -45,7 +45,7 @@ memmove(void *dst_void,
|
|||||||
"addi %2, %2, -4\n" // aligned_dst--;
|
"addi %2, %2, -4\n" // aligned_dst--;
|
||||||
"addi %3, %3, -4\n" // length -= LITTLE_BLOCK_SIZE;
|
"addi %3, %3, -4\n" // length -= LITTLE_BLOCK_SIZE;
|
||||||
"sw %0, 0(%2)\n" // aligned_dst = src0;
|
"sw %0, 0(%2)\n" // aligned_dst = src0;
|
||||||
: "=r"(src0), "+r"(aligned_src), "+r"(aligned_dst), "+r"(length)
|
: "=&r"(src0), "+r"(aligned_src), "+r"(aligned_dst), "+r"(length)
|
||||||
:: "memory");
|
:: "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,13 +122,13 @@ memmove(void *dst_void,
|
|||||||
*/
|
*/
|
||||||
long src0;
|
long src0;
|
||||||
/* DIG-694: need at least 2 instructions between lw and sw */
|
/* DIG-694: need at least 2 instructions between lw and sw */
|
||||||
asm volatile("lw %0, 0(%4)\n" // long src0 = *aligned_src;
|
asm volatile("lw %0, 0(%1)\n" // long src0 = *aligned_src;
|
||||||
"addi %1, %4, 4\n" // aligned_src++;
|
"addi %1, %1, 4\n" // aligned_src++;
|
||||||
"addi %2, %5, 4\n" // aligned_dst++;
|
"addi %2, %2, 4\n" // aligned_dst++;
|
||||||
"addi %3, %6, -4\n" // length -= LITTLE_BLOCK_SIZE;
|
"addi %3, %3, -4\n" // length -= LITTLE_BLOCK_SIZE;
|
||||||
"sw %0, -4(%5)\n" // *(aligned_dst-1) = src0;
|
"sw %0, -4(%2)\n" // *(aligned_dst-1) = src0;
|
||||||
: "=r"(src0), "=r"(aligned_src), "=r"(aligned_dst), "=r"(length)
|
: "=&r"(src0), "+r"(aligned_src), "+r"(aligned_dst), "+r"(length)
|
||||||
: "r"(aligned_src), "r"(aligned_dst), "r"(length));
|
:: "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pick up any residual with a byte copier. */
|
/* Pick up any residual with a byte copier. */
|
||||||
|
Reference in New Issue
Block a user