#### 9.13.9 Floating Point

All 80387 floating point types except packed BCD are supported. (BCD support may be added without much difficulty). These data types are 16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit), and extended (80-bit) precision floating point. Each supported type has an instruction mnemonic suffix and a constructor associated with it. Instruction mnemonic suffixes specify the operand's data type. Constructors build these data types into memory.

- Floating point constructors are ``.float`' or ``.single`', ``.double`', and ``.tfloat`' for 32-, 64-, and 80-bit formats. These correspond to instruction mnemonic suffixes ``s`', ``l`', and ``t`'. ``t`' stands for 80-bit (ten byte) real. The 80387 only supports this format via the ``fldt`' (load 80-bit real to stack top) and ``fstpt`' (store 80-bit real and pop stack) instructions.

- Integer constructors are ``.word`', ``.long`' or ``.int`', and ``.quad`' for the 16-, 32-, and 64-bit integer formats. The corresponding instruction mnemonic suffixes are ``s`' (single), ``l`' (long), and ``q`' (quad). As with the 80-bit real format, the 64-bit ``q`' format is only present in the ``fildq`' (load quad integer to stack top) and ``fistpq`' (store quad integer and pop stack) instructions.

Register to register operations should not use instruction mnemonic suffixes. ``fstl %st, %st(1)`' will give a warning, and be assembled as if you wrote ``fst %st, %st(1)`', since all register to register operations use 80-bit floating point operands. (Contrast this with ``fstl %st, mem`', which converts ``%st`' from 80-bit to 64-bit floating point format, then stores the result in the 4 byte location ``mem`')