Floating Point Instructions
47 ARM instructions in this extension - click any row for encoding, pseudocode, and full documentation.
| Mnemonic | Syntax | Format | Summary |
|---|---|---|---|
| fabs | FABS <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Calculates the absolute value of a float. |
| fadd | FADD <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Adds two floating-point values. |
| fccmp | FCCMP <Hn|Sn|Dn>, <Hm|Sm|Dm>, #<nzcv>, <cond> | FP Compare | Compares floats only if condition is met, else sets flags to immediate. |
| fcmp | FCMP <Hn|Sn|Dn>, <Hm|Sm|Dm|#0.0> | FP Compare | Compares two floating-point values and updates process flags (NZCV). |
| fcsel | FCSEL <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm>, <cond> | FP Data Processing | Selects one of two floats based on condition flags. |
| fcvt | FCVT <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Conversion | Converts between float precisions (e.g., Half <-> Single <-> Double). |
| fcvtas | FCVTAS <Wd|Xd>, <Hn|Sn|Dn> | FP Conversion | Converts float to signed integer, rounding to nearest. |
| fcvtau | FCVTAU <Wd|Xd>, <Hn|Sn|Dn> | FP Conversion | Converts float to unsigned integer, rounding to nearest. |
| fcvtms | FCVTMS <Wd|Xd>, <Hn|Sn|Dn> | FP Conversion | Converts float to signed integer, rounding towards minus infinity (Floor). |
| fcvtmu | FCVTMU <Wd|Xd>, <Hn|Sn|Dn> | FP Conversion | Converts float to unsigned integer, rounding towards minus infinity. |
| fcvtns | FCVTNS <Wd|Xd>, <Hn|Sn|Dn> | FP Conversion | Converts float to signed integer, rounding to nearest (bankers' round). |
| fcvtnu | FCVTNU <Wd|Xd>, <Hn|Sn|Dn> | FP Conversion | Converts float to unsigned integer, rounding to nearest (bankers' round). |
| fcvtps | FCVTPS <Wd|Xd>, <Hn|Sn|Dn> | FP Conversion | Converts float to signed integer, rounding towards plus infinity (Ceil). |
| fcvtpu | FCVTPU <Wd|Xd>, <Hn|Sn|Dn> | FP Conversion | Converts float to unsigned integer, rounding towards plus infinity. |
| fcvtzs | FCVTZS <Wd|Xd>, <Hn|Sn|Dn> {, #<fbits>} | FP Conversion | Converts float to signed integer, rounding towards zero (Truncate). |
| fcvtzu | FCVTZU <Wd|Xd>, <Hn|Sn|Dn> {, #<fbits>} | FP Conversion | Converts float to unsigned integer, rounding towards zero (Truncate). |
| fdiv | FDIV <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Divides two floating-point values. |
| fmadd | FMADD <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm>, <Ha|Sa|Da> | FP Data Processing | Calculates (Vn * Vm) + Va without intermediate rounding. |
| fmax | FMAX <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Returns the larger of two values. |
| fmaxnm | FMAXNM <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Returns larger value, handling NaNs according to IEEE 754-2008 'maxNum'. |
| fmin | FMIN <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Returns the smaller of two values. |
| fminnm | FMINNM <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Returns smaller value, handling NaNs according to IEEE 754-2008 'minNum'. |
| fmov | FMOV <Hd|Sd|Dd>, #<fimm> | FP Immediate | Moves a floating-point immediate into a scalar register. |
| fmov | FMOV <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Copies a value from one scalar FP register to another. |
| fmov | FMOV <Wd|Xd>, <Sn|Dn> | FP Conversion | Copies bits between a General-Purpose Register (W/X) and FP Register (S/D). |
| fmov | FMOV <Sd|Dd>, <Wn|Xn> | FP Conversion | Copies bits from a General-Purpose Register (W/X) to FP Register (S/D). |
| fmsub | FMSUB <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm>, <Ha|Sa|Da> | FP Data Processing | Calculates (Vn * Vm) - Va. |
| fmul | FMUL <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Multiplies two floating-point values. |
| fneg | FNEG <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Negates the value (flips sign bit). |
| fnmadd | FNMADD <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm>, <Ha|Sa|Da> | FP Data Processing | Calculates -((Vn * Vm) + Va). |
| fnmsub | FNMSUB <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm>, <Ha|Sa|Da> | FP Data Processing | Calculates -((Vn * Vm) - Va). |
| fnmul | FNMUL <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Calculates -(Vn * Vm). |
| frinta | FRINTA <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Rounds float to nearest integral value (ties away from zero). |
| frinti | FRINTI <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Rounds float to integral value using current FPCR rounding mode. |
| frintm | FRINTM <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Rounds float to integral value towards minus infinity (Floor). |
| frintn | FRINTN <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Rounds float to integral value nearest, ties to even. |
| frintp | FRINTP <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Rounds float to integral value towards plus infinity (Ceil). |
| frintx | FRINTX <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Rounds float to integral value using current mode, raising Inexact exception. |
| frintz | FRINTZ <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Rounds float to integral value towards zero (Truncate). |
| fsqrt | FSQRT <Hd|Sd|Dd>, <Hn|Sn|Dn> | FP Data Processing | Calculates square root. |
| fsub | FSUB <Hd|Sd|Dd>, <Hn|Sn|Dn>, <Hm|Sm|Dm> | FP Data Processing | Subtracts two floating-point values. |
| ldp | LDP <St1|Dt1|Qt1>, <St2|Dt2|Qt2>, [<Xn|SP>, #<imm>] | Load/Store Pair | Loads two floating-point/SIMD registers. |
| ldr | LDR <Bt|Ht|St|Dt|Qt>, [<Xn|SP>, #<pimm>] | Load/Store | Loads a floating-point/SIMD register from memory. |
| scvtf | SCVTF <Hd|Sd|Dd>, <Wn|Xn> {, #<fbits>} | FP Conversion | Converts signed integer (GPR) to floating-point. |
| stp | STP <St1|Dt1|Qt1>, <St2|Dt2|Qt2>, [<Xn|SP>, #<imm>] | Load/Store Pair | Stores two floating-point/SIMD registers. |
| str | STR <Bt|Ht|St|Dt|Qt>, [<Xn|SP>, #<pimm>] | Load/Store | Stores a floating-point/SIMD register to memory. |
| ucvtf | UCVTF <Hd|Sd|Dd>, <Wn|Xn> {, #<fbits>} | FP Conversion | Converts unsigned integer (GPR) to floating-point. |