PR_SET_FP_MODE(2const) PR_SET_FP_MODE(2const)
NAME
PR_SET_FP_MODE - set the floating point mode of the calling process
LIBRARY
Standard C library (libc, -lc)
SYNOPSIS
#include <linux/prctl.h> /* Definition of PR_* constants */
#include <sys/prctl.h>
int prctl(PR_SET_FP_MODE, unsigned long mode);
DESCRIPTION
On the MIPS architecture, user-space code can be built using an ABI
which permits linking with code that has more restrictive floating-point
(FP) requirements. For example, user-space code may be built to target
the O32 FPXX ABI and linked with code built for either one of the more
restrictive FP32 or FP64 ABIs. When more restrictive code is linked in,
the overall requirement for the process is to use the more restrictive
floating-point mode.
Because the kernel has no means of knowing in advance which mode the
process should be executed in, and because these restrictions can change
over the lifetime of the process, the PR_SET_FP_MODE operation is pro-
vided to allow control of the floating-point mode from user space.
The mode argument is a bit mask describing the floating-point mode used:
PR_FP_MODE_FR
When this bit is unset (so called FR=0 or FR0 mode), the 32
floating-point registers are 32 bits wide, and 64-bit registers
are represented as a pair of registers (even- and odd- numbered,
with the even-numbered register containing the lower 32 bits, and
the odd-numbered register containing the higher 32 bits).
When this bit is set (on supported hardware), the 32 floating-
point registers are 64 bits wide (so called FR=1 or FR1 mode).
Note that modern MIPS implementations (MIPS R6 and newer) support
FR=1 mode only.
Applications that use the O32 FP32 ABI can operate only when this
bit is unset (FR=0; or they can be used with FRE enabled, see be-
low). Applications that use the O32 FP64 ABI (and the O32 FP64A
ABI, which exists to provide the ability to operate with existing
FP32 code; see below) can operate only when this bit is set
(FR=1). Applications that use the O32 FPXX ABI can operate with
either FR=0 or FR=1.
PR_FP_MODE_FRE
Enable emulation of 32-bit floating-point mode. When this mode
is enabled, it emulates 32-bit floating-point operations by rais-
ing a reserved-instruction exception on every instruction that
uses 32-bit formats and the kernel then handles the instruction
in software. (The problem lies in the discrepancy of handling
odd-numbered registers which are the high 32 bits of 64-bit reg-
isters with even numbers in FR=0 mode and the lower 32-bit parts
of odd-numbered 64-bit registers in FR=1 mode.) Enabling this
bit is necessary when code with the O32 FP32 ABI should operate
with code with compatible the O32 FPXX or O32 FP64A ABIs (which
require FR=1 FPU mode) or when it is executed on newer hardware
(MIPS R6 onwards) which lacks FR=0 mode support when a binary
with the FP32 ABI is used.
Note that this mode makes sense only when the FPU is in 64-bit
mode (FR=1).
Note that the use of emulation inherently has a significant per-
formance hit and should be avoided if possible.
In the N32/N64 ABI, 64-bit floating-point mode is always used, so FPU
emulation is not required and the FPU always operates in FR=1 mode.
This operation is mainly intended for use by the dynamic linker
(ld.so(8)).
RETURN VALUE
On success, 0 is returned. On error, -1 is returned, and errno is set
to indicate the error.
ERRORS
EOPNOTSUPP
mode has an invalid or unsupported value.
STANDARDS
Linux. MIPS only.
HISTORY
Linux 4.0 (MIPS).
SEE ALSO
prctl(2), PR_GET_FP_MODE(2const)
Linux man-pages 6.9.1 2024-06-02 PR_SET_FP_MODE(2const)
Generated by dwww version 1.16 on Tue Dec 16 04:26:02 CET 2025.