gcc 是否提供内置函数来读取大端内存?

Does gcc provide builtin to read big endian memory?

我需要从两个小端内核(例如 arm)read/write 设备寄存器(在我的例子中是大端地址 space)。我不想使用中间字节序转换例程(例如 htonl)。我的理解是,现代内核有指令,它们可以使用这些指令直接对大端内存执行 reads/writes。

gcc 是否为上述内容提供任何自动生成正确汇编指令的内置函数?

GCC 4.3.0 提供了内置函数:

  1. 内置函数:int32_t__builtin_bswap32(int32_tx),它returns字节的顺序颠倒了。例如。 11223344 将是 0x44332211
  2. 内置函数:int64_t __builtin_bswap64 (int64_t x) 也类似于 __builtin_bswap32,只是它 returns 64 位。

请参考Beware the builtins