小编Qua*_*lot的帖子

使用AARCH64程序集编写memcpy

如何编写一个函数,将给定数量的字节从给定的源复制到 AARCH64 汇编语言的给定目的地?这基本上就像 memcpy,但有一些额外的假设。

  1. 源和目标在 16 字节边界上对齐
  2. 内存区域不重叠
  3. 计数是16的倍数
  4. 指令必须在 80 字节以内

到目前为止,我找到的最好的资源是memcpy 的源代码,但我不明白哪些部分与我给出的特定参数相关。

编辑:到目前为止,我已经尝试将 C 中的以下函数转换为程序集。

void memcpy80(unsigned char* dest, unsigned char* sourc, unsigned long count)
{
unsigned char* end = sourc + count;
while (sourc < end)
    *(dest++) = *(sourc++)
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试将其归结为符合规范的版本,如下所示:

memcpy80:
    add x3, x1, x2
loopstart:
    cmp x3, x1
    //how do I branch to loopend if x1 > x3?
    add x0, x0, 1
    add x1, x1, 1
    ldr x4, [x1]
    str x4, [x0]
    b …
Run Code Online (Sandbox Code Playgroud)

assembly memcpy micro-optimization arm64

0
推荐指数
1
解决办法
2819
查看次数

标签 统计

arm64 ×1

assembly ×1

memcpy ×1

micro-optimization ×1