RFA: Fix signbit() for 16-bit targets
Nicholas Clifton
nickc@redhat.com
Wed May 13 14:23:00 GMT 2015
Hi Craig, Hi DJ,
>>> + return (w & 0x80000000) != 0;
>> Also 0x80000000 -> 0x80000000UL ?
> Given that uint32_t is being used, UINT32_C(0x80000000) would seem most
> appropriate, although this might mean stdint.h would have to be added.
In theory no cast is needed. According to the ISO C standard an integer
constant has:
6.4.4 (5)
The type of an integer constant is the first of the corresponding
list in which its value can be represented.
Suffix Decimal Constant
none int
long int
long long int
So for targets where "int" is 32-bits 0x80000000 will be an int, but for
targets where "int" is 16-bits 0x80000000 will be a long int. (The
signed-ness of the type should not matter here as we are only performing
a binary operation on the value).
This also matches the practice. At least for the 16-bit RL78 toolchain
compiled with GCC 4.8. The code, without a cast, works there.
Cheers
Nick
More information about the Newlib
mailing list