This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Endian swapping with C code on ARM
>>>>> "Falk" == Falk Hueffner <hueffner@informatik.uni-tuebingen.de> writes:
Falk> Richard Earnshaw <rearnsha@gcc.gnu.org> writes:
>> You also get into issues of word size. Which builtins do you
>> provide? 32-bit? 16-bit? 64-bit?
Falk> In theory, any attempt to describe a 16-bit bswap should be
Falk> recognized as 16 bit rotation. So my patch provides only 32 and
Falk> 64.
Several platforms don't have a rotate instruction, so you should also
have a 16 bit swap.
>> When is it best to stop trying to inline all this and drop into a
>> library call?
Falk> This patch never open-codes bswap. I'm not sure if it would be
Falk> worth doing, since basically every platform has some trick that
Falk> would save a cycle or two over generic inlined code.
bswap is sufficiently important to high speed networking code that you
would only want the function call if -Os is in effect. Otherwise it
should be inline. (Certainly that's true for 16 and 32 bit variants;
the 64 bit one is more debatable.) But the platform specific handling
can certainly do that, so having the library call as a fallback seems
ok.
This is good stuff...
paul