2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Engine floating point functions
5 * FILE: win32ss/gdi/eng/float.c
6 * PROGRAMER: David Welch
9 /* INCLUDES *****************************************************************/
16 /* FUNCTIONS *****************************************************************/
19 #pragma warning(disable:__WARNING_WRONG_KIND)
24 _Kernel_float_restored_
25 _At_(*pBuffer
, _Kernel_requires_resource_held_(EngFloatState
)
26 _Kernel_releases_resource_(EngFloatState
))
30 EngRestoreFloatingPointState(
31 _In_reads_(_Inexpressible_(statesize
)) PVOID pBuffer
)
35 Status
= KeRestoreFloatingPointState((PKFLOATING_SAVE
)pBuffer
);
36 if (!NT_SUCCESS(Status
))
45 _Success_(((pBuffer
!= NULL
&& cjBufferSize
!= 0) && return == 1) ||
46 ((pBuffer
== NULL
|| cjBufferSize
== 0) && return > 0))
47 _When_(pBuffer
!= NULL
&& cjBufferSize
!= 0 && return == 1, _Kernel_float_saved_
48 _At_(*pBuffer
, _Post_valid_
_Kernel_acquires_resource_(EngFloatState
)))
49 _On_failure_(_Post_satisfies_(return == 0))
53 EngSaveFloatingPointState(
54 _At_(*pBuffer
, _Kernel_requires_resource_not_held_(EngFloatState
))
55 _Out_writes_bytes_opt_(cjBufferSize
) PVOID pBuffer
,
56 _Inout_ ULONG cjBufferSize
)
58 KFLOATING_SAVE TempBuffer
;
61 if ((pBuffer
== NULL
) || (cjBufferSize
== 0))
63 /* Check for floating point support. */
64 Status
= KeSaveFloatingPointState(&TempBuffer
);
65 if (Status
!= STATUS_SUCCESS
)
70 KeRestoreFloatingPointState(&TempBuffer
);
71 return(sizeof(KFLOATING_SAVE
));
74 if (cjBufferSize
< sizeof(KFLOATING_SAVE
))
79 Status
= KeSaveFloatingPointState((PKFLOATING_SAVE
)pBuffer
);
80 if (!NT_SUCCESS(Status
))