PROCESSOR-SDK-AM64X: A53汇编

Part Number: PROCESSOR-SDK-AM64X
    asm volatile (
        "sub %[dst], %[dst], #64 \n"
        "1: \n"
        "ldnp q0, q1, [%[src]] \n"
        "ldnp q2, q3, [%[src], #32] \n"
        "add %[dst], %[dst], #64 \n"
        "subs %[sz], %[sz], #64 \n"
        "add %[src], %[src], #64 \n"
        "stnp q0, q1, [%[dst]] \n"
        "stnp q2, q3, [%[dst], #32] \n"
        "b.gt 1b \n"
        : [dst]"+r"(dst), [src]"+r"(src), [sz]"+r"(sz) : : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "cc", "memory");
这个段汇编代码是否避免了数据的缓存,直接写到DDR?
  • 您好,

    感谢您对TI产品的关注!由于问题比较复杂,我需要询问更了解这款芯片的TI资深工程师,再为您解答,但是欧美正在放圣诞假期,预计回复会延迟,一旦得到回复会立即回复给您。

  • 您好,

    请您提供更多有关这方面的详细信息吗? 该代码来自哪个 MCU + SDK 版本以及哪个特定文件、请告知我相同信息。

  • 您好

    由于长时间未收到回复,本贴关闭。

    如果仍有问题,请随时重新发帖咨询。

  • 您好,为简单介绍、此代码用于将数据从源存储器复制到目标存储器、它类似于 C 的 memcpy 函数。您连接的代码部分使用 ldnp 和 stnp 加载和存储数据、根据 Armv8-A 架构手册、"这些指令向存储器系统提供了一个提示、表明访问是非时间访问或流访问、并且在不久的将来不太可能重复。 这意味着不需要数据缓存。" 因此、这段代码确实运行在存储器的未缓存区域。 有关这方面的更多详细信息、请参阅 Armv8-A 架构参考手册中的指令集。

    我不确定是否将数据复制到 DDR、因为我在这里不知道 dst 和 src 的值、但我可以确认、此代码是将 src 复制到 dst、同时避免数据缓存、您可以确认 dst 是否在 DDR 区域。

  • 好的,谢谢