小编dc4*_*c42的帖子

使用 gcc 在 ARM Cortex M4 上交换交替字节的最快方法

我需要在使用 ARM Cortex M4 处理器的嵌入式系统中尽快交换缓冲区中的备用字节。我用的是海湾合作委员会。数据量可变,但最大略高于 2K。转换一些额外的字节并不重要,因为我可以使用超大的缓冲区。

我知道 ARM 有这REV16条指令,我可以用它来交换 32 位字中的交替字节。我不知道的是:

  1. 有没有一种方法可以在 gcc 中获取这条指令而无需求助于汇编程序?该__builtin_bswap16内在函数似乎仅对 16 位字进行操作。一次转换 4 个字节肯定比转换 2 个字节快。

  2. Cortex M4 是否有重排序缓冲区和/或寄存器重命名?如果不是,当我在部分展开的循环中转换缓冲区的双字时,我需要做什么来最大限度地减少管道停顿?

例如,这段代码是否有效,其中REV16适当定义为解决(1):

uint32_t *buf = ... ;
size_t n = ... ;  // (number of bytes to convert + 15)/16
for (size_t i = 0; i < n; ++i)
{
    uint32_t a = buf[0];
    uint32_t b = buf[1];
    uint32_t c = buf[2];
    uint32_t d = buf[3];
    REV16(a, a);
    REV16(b, b);
    REV16(c, c); …
Run Code Online (Sandbox Code Playgroud)

gcc arm endianness

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

arm ×1

endianness ×1

gcc ×1