#### 9.15.10 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`’)