PR_SET_FP_MODE(2const)

NUME
PR_SET_FP_MODE - stabilește modul în virgulă mobilă al procesului apelant

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <linux/prctl.h>  /* Definirea constantelor PR_* */
#include <sys/prctl.h>

int prctl(PR_SET_FP_MODE, unsigned long mode);

DESCRIERE
Pe arhitectura MIPS, codul din spațiul utilizatorului poate fi creat utilizând o ABI care permite legarea cu un cod care are cerințe mai restrictive privind punctul flotant (FP). De exemplu, codul din spațiul utilizatorului poate fi construit pentru a viza O32 FPXX ABI și legat cu codul construit pentru unul dintre ABI-urile FP32 sau FP64 mai restrictive. Atunci când codul mai restrictiv este conectat, cerința generală pentru proces este de a utiliza modul în virgulă mobilă mai restrictiv.

Deoarece nucleul nu are cum să știe dinainte în ce mod ar trebui să fie executat procesul și deoarece aceste restricții se pot schimba pe durata de viață a procesului, operația PR_SET_FP_MODE este prevăzută pentru a permite controlul modului în virgulă mobilă din spațiul utilizatorului.

Argumentul mode este o mască de biți care descrie modul în virgulă mobilă utilizat:

PR_FP_MODE_FR
    Când acest bit este unset - dezactivat (așa-numitul mod FR=0 sau FR0), cele 32 de registre în virgulă mobilă au o lățime de 32 de biți, iar registrele pe 64 de biți sunt reprezentate ca o pereche de registre (cu numere pare și impare, registrul cu număr par conținând cei 32 de biți inferiori, iar registrul cu număr impar conținând cei 32 de biți superiori).

    Când acest bit este set - activat (pe hardware acceptat), cele 32 de registre în virgulă mobilă au lățimea de 64 de biți (așa-numitul mod FR=1 sau FR1). Rețineți că implementările MIPS moderne (MIPS R6 și mai noi) acceptă numai modul FR=1.

    Aplicațiile care utilizează O32 FP32 ABI pot funcționa numai atunci când acest bit este unset (FR=0; sau pot fi utilizate cu FRE activat, a se vedea mai jos). Aplicațiile care utilizează ABI O32 FP64 (și ABI O32 FP64A, care există pentru a oferi posibilitatea de a opera cu codul FP32 existent; a se vedea mai jos) pot funcționa numai atunci când acest bit este set (FR=1). Aplicațiile care utilizează O32 FPXX ABI pot funcționa fie cu FR=0, fie cu FR=1.

PR_FP_MODE_FRE
    Activează emulația modului de virgulă mobilă pe 32 de biți. Atunci când acest mod este activat, el emulează operațiile în virgulă mobilă pe 32 de biți prin ridicarea unei excepții de instrucțiune rezervată la fiecare instrucțiune care utilizează formate pe 32 de biți, iar nucleul gestionează apoi instrucțiunea în mod software. (Problema constă în discrepanța de gestionare a registrelor cu numere impare, care sunt cei 32 de biți superiori ai registrelor pe 64 de biți cu numere pare în modul FR=0 și părțile inferioare pe 32 de biți ale registrelor pe 64 de biți cu numere impare în modul FR=1). Activarea acestui bit este necesară atunci când codul cu ABI O32 FP32 trebuie să funcționeze cu un cod compatibil cu ABI O32 FPXX sau O32 FP64A (care necesită modul FPU FR=1) sau atunci când este executat pe un hardware mai nou (MIPS R6 și mai departe) care nu suportă modul FR=0 atunci când este utilizat un binar cu ABI FP32.

    Rețineți că acest mod are sens numai atunci când FPU este în modul pe 64 de biți (FR=1).

    Rețineți că utilizarea emulației are în mod inerent un impact semnificativ asupra performanței și ar trebui evitată dacă este posibil.

În ABI N32/N64, modul virgulă mobilă pe 64 de biți este utilizat întotdeauna, astfel încât emulația FPU nu este necesară, iar FPU funcționează întotdeauna în modul FR=1.

Această operație este destinată în principal utilizării de către editorul de legături dinamice (ld.so(8)).

VALOAREA RETURNATĂ
În caz de succes, se returnează 0. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EOPNOTSUPP
    mode are o valoare nevalidă sau neacceptată.

STANDARDE
Linux. Doar MIPS.

ISTORIC
Linux 4.0 (MIPS).

CONSULTAȚI ȘI
prctl(2), PR_GET_FP_MODE(2const)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.