1 /* 2 * PROJECT: ReactOS CRT library 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Implementation of _controlfp_s (adapted from wine msvcrt/math.c) 5 * COPYRIGHT: Copyright 2000 Jon Griffiths 6 * Copyright 2010 Piotr Caban 7 * Copyright 2021 Roman Masanin <36927roma@gmail.com> 8 */ 9 10 #include <precomp.h> 11 #include <float.h> 12 13 #ifdef _M_ARM 14 #define INVALID_MASK ~(_MCW_EM | _MCW_RC | _MCW_DN) 15 #else 16 #define INVALID_MASK ~(_MCW_EM | _MCW_IC | _MCW_RC | _MCW_PC | _MCW_DN) 17 #endif 18 19 int CDECL _controlfp_s(unsigned int* cur, unsigned int newval, unsigned int mask) 20 { 21 unsigned int val; 22 23 if (!MSVCRT_CHECK_PMT((newval & mask & INVALID_MASK) == 0)) 24 { 25 if (cur) *cur = _controlfp(0, 0); /* retrieve it anyway */ 26 return EINVAL; 27 } 28 val = _controlfp(newval, mask); 29 if (cur) *cur = val; 30 return 0; 31 } 32