MxCsr
Mise à jour : novembre 2007
L'état du registre inclut également MxCsr. La convention d'appel divise ce registre en une partie volatile et une partie non volatile. La partie volatile se compose des 6 indicateurs d'état, MXCSR [0:5], alors que le reste du registre, MXCSR [6:15], est considéré non volatil.
La partie non volatile possède les valeurs standard suivantes au démarrage de l'exécution du programme :
MXCSR[6] : Denormals are zeros - 0
MXCSR[7:12] : Exception masks all 1's (all exceptions masked)
MXCSR[13:14] : Rounding control - 0 (round to nearest)
MXCSR[15] : Flush to zero for masked underflow - 0 (off)
Un appelé qui modifie l'un des champs non volatils dans MXCSR doit les restaurer avant de retourner à son appelant. En outre, un appelant qui a modifié l'un de ces champs doit rétablir leur valeur standard avant d'appeler un appelé, à moins que, selon les termes d'un contrat, l'appelé attende les valeurs modifiées.
Il existe deux exceptions aux règles relatives à la rémanence des indicateurs de contrôle :
dans les fonctions dont l'objectif documenté consiste à modifier les indicateurs MxCsr non volatils ;
lorsqu'il peut être prouvé que la violation des résultats de ces règles dans un programme qui se comporte de la même manière ou a la même signification qu'un programme où ces règles ne sont pas enfreintes (par exemple, par le biais d'une analyse de l'intégralité d'un programme) ;
aucune supposition ne peut être faite à propos de l'état de la partie volatile de MXCSR au-delà de la limite d'une fonction, sauf spécification contraire dans la documentation de celle-ci.