### 7.2.3. Floating-point parameters

Floating-point values are passed to (and returned from) functions using the floating-point registers. Both integer (general-purpose) and floating-point registers can be used at the same time. This means that the floating-point parameters are passed in the floating-point H, S or D registers and other parameters are passed in integer X or W registers. The AArch64 Procedure Call Standard mandates hardware floating-point wherever floating-point arithmetic is required, so there is no software floating-point linkage in AArch64 state.

A detailed list of instructions is given in the ARMv8-A Architecture Reference Manual, but the main floating-point data processing operations are listed here to show the kind of things that can be done:

Table 7.1.

 `FABS Sd, Sn` Calculates the absolute value. `FNEG Sd, Sn` Negates the value. `FSQRT Sd, Sn` Calculates the square root. `FADD Sd, Sn, Sm` Adds values. `FSUB Sd, Sn, Sm` Subtracts values. `FDIV Sd, Sn, Sm` Divides one value by another. `FMUL Sd, Sn, Sm` Multiplies two values. `FNMUL Sd, Sn, Sm` Multiplies and negates. `FMADD Sd, Sn, Sm, Sa` Multiplies and adds (fused). `FMSUB Sd, Sn, Sm, Sa` Multiplies, negates and subtracts (fused). `FNMADD Sd, Sn, Sm, Sa` Multiplies, negates and adds (fused). `FNMSUB Sd, Sn, Sm, Sa` Multiplies, negates and subtracts (fused). `FPINTy Sd, Sn` Rounds to an integral in floating-point format (where `y` is one of a number of rounding mode options) `FCMP Sn, Sm` Performs a floating-point compare. `FCCMP Sn, Sm, #uimm4, cond` Performs a floating-point conditional compare. `FCSEL Sd, Sn, Sm, cond` Floating-point conditional select if (cond) Sd = Sn else Sd = Sm. `FCVTSty Rn, Sm` Converts a floating-point value to an integer value (ty specifies type of rounding). `SCVTF Sm, Ro` Converts an integer value to a floating-point value.