as: i386-Float
9.15.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')