fix(newlib): fix riscv asm inlining for mem functions

This commit is contained in:
Alexey Lapshin
2025-08-29 12:45:25 +07:00
committed by BOT
parent 714b7445e2
commit 3d056ad1e2
2 changed files with 9 additions and 9 deletions

View File

@@ -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");
} }

View File

@@ -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. */