Node: i386-Float, Next: i386-SIMD, Previous: i386-Jumps, Up: i386-Dependent

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