小编A.K*_*.K.的帖子

gcc用memcpy和memset替换循环

我有以下简单程序:

#define N 20
long c[N];
long a[N + N];

void f(void)
{
    long *s = c;
    long *p = a;
    while (p != a + N) *p++ = *s++;
    while (p != a + N + N) *p++ = 0;
}
Run Code Online (Sandbox Code Playgroud)

我用它编译:

/usr/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc -mthumb -O3 -o main.o -c main.c
Run Code Online (Sandbox Code Playgroud)

gcc方便地用memcpymemset分别替换循环:

00000000 <f>:
   0:   b570            push    {r4, r5, r6, lr}
   2:   4d07            ldr     r5, [pc, #28]   ; (20 <f+0x20>)
   4:   4c07            ldr     r4, [pc, #28]   ; …
Run Code Online (Sandbox Code Playgroud)

c gcc arm

5
推荐指数
2
解决办法
912
查看次数

标签 统计

arm ×1

c ×1

gcc ×1