on x86 a newish gcc will replace that with a bswap instruction (or movbe if available on target).
it does not do the same if you use byte addressing variant, it probably could if someone provides an appropriate pattern matcher to gcc.