Next: , Previous: Hex Floats, Up: C Extensions


5.13 Fixed-Point Types

As an extension, the GNU C compiler supports fixed-point types as defined in the N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC will evolve as the draft technical report changes. Calling conventions for any target might also change. Not all targets support fixed-point types.

The fixed-point types are short _Fract, _Fract, long _Fract, long long _Fract, unsigned short _Fract, unsigned _Fract, unsigned long _Fract, unsigned long long _Fract, _Sat short _Fract, _Sat _Fract, _Sat long _Fract, _Sat long long _Fract, _Sat unsigned short _Fract, _Sat unsigned _Fract, _Sat unsigned long _Fract, _Sat unsigned long long _Fract, short _Accum, _Accum, long _Accum, long long _Accum, unsigned short _Accum, unsigned _Accum, unsigned long _Accum, unsigned long long _Accum, _Sat short _Accum, _Sat _Accum, _Sat long _Accum, _Sat long long _Accum, _Sat unsigned short _Accum, _Sat unsigned _Accum, _Sat unsigned long _Accum, _Sat unsigned long long _Accum. Fixed-point data values contain fractional and optional integral parts. The format of fixed-point data varies and depends on the target machine.

Support for fixed-point types includes prefix and postfix increment and decrement operators (++, --); unary arithmetic operators (+, -, !); binary arithmetic operators (+, -, *, /); binary shift operators (<<, >>); relational operators (<, <=, >=, >); equality operators (==, !=); assignment operators (+=, -=, *=, /=, <<=, >>=); and conversions to and from integer, floating-point, or fixed-point types.

Use a suffix `hr' or `HR' in a literal constant of type short _Fract and _Sat short _Fract, `r' or `R' for _Fract and _Sat _Fract, `lr' or `LR' for long _Fract and _Sat long _Fract, `llr' or `LLR' for long long _Fract and _Sat long long _Fract, `uhr' or `UHR' for unsigned short _Fract and _Sat unsigned short _Fract, `ur' or `UR' for unsigned _Fract and _Sat unsigned _Fract, `ulr' or `ULR' for unsigned long _Fract and _Sat unsigned long _Fract, `ullr' or `ULLR' for unsigned long long _Fract and _Sat unsigned long long _Fract, `hk' or `HK' for short _Accum and _Sat short _Accum, `k' or `K' for _Accum and _Sat _Accum, `lk' or `LK' for long _Accum and _Sat long _Accum, `llk' or `LLK' for long long _Accum and _Sat long long _Accum, `uhk' or `UHK' for unsigned short _Accum and _Sat unsigned short _Accum, `uk' or `UK' for unsigned _Accum and _Sat unsigned _Accum, `ulk' or `ULK' for unsigned long _Accum and _Sat unsigned long _Accum, and `ullk' or `ULLK' for unsigned long long _Accum and _Sat unsigned long long _Accum.

GCC support of fixed-point types as specified by the draft technical report is incomplete:

Fixed-point types are supported by the DWARF2 debug information format.