Where Online Learning is simpler!
The C and C++ Include Header Files
/usr/include/x86_64-linux-gnu/fpu_control.h
$ cat -n /usr/include/x86_64-linux-gnu/fpu_control.h 1 /* FPU control word bits. x86 version. 2 Copyright (C) 1993-2024 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17
. */ 18 19 #ifndef _FPU_CONTROL_H 20 #define _FPU_CONTROL_H 1 21 22 /* Note that this file sets on x86-64 only the x87 FPU, it does not 23 touch the SSE unit. */ 24 25 /* Here is the dirty part. Set up your 387 through the control word 26 * (cw) register. 27 * 28 * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0 29 * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM 30 * 31 * IM: Invalid operation mask 32 * DM: Denormalized operand mask 33 * ZM: Zero-divide mask 34 * OM: Overflow mask 35 * UM: Underflow mask 36 * PM: Precision (inexact result) mask 37 * 38 * Mask bit is 1 means no interrupt. 39 * 40 * PC: Precision control 41 * 11 - round to extended precision 42 * 10 - round to double precision 43 * 00 - round to single precision 44 * 45 * RC: Rounding control 46 * 00 - rounding to nearest 47 * 01 - rounding down (toward - infinity) 48 * 10 - rounding up (toward + infinity) 49 * 11 - rounding toward zero 50 * 51 * IC: Infinity control 52 * That is for 8087 and 80287 only. 53 * 54 * The hardware default is 0x037f which we use. 55 */ 56 57 #include
58 59 /* masking of interrupts */ 60 #define _FPU_MASK_IM 0x01 61 #define _FPU_MASK_DM 0x02 62 #define _FPU_MASK_ZM 0x04 63 #define _FPU_MASK_OM 0x08 64 #define _FPU_MASK_UM 0x10 65 #define _FPU_MASK_PM 0x20 66 67 /* precision control */ 68 #define _FPU_EXTENDED 0x300 /* libm requires double extended precision. */ 69 #define _FPU_DOUBLE 0x200 70 #define _FPU_SINGLE 0x0 71 72 /* rounding control */ 73 #define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */ 74 #define _FPU_RC_DOWN 0x400 75 #define _FPU_RC_UP 0x800 76 #define _FPU_RC_ZERO 0xC00 77 78 #define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */ 79 80 81 /* The fdlibm code requires strict IEEE double precision arithmetic, 82 and no interrupts for exceptions, rounding to nearest. */ 83 84 #define _FPU_DEFAULT 0x037f 85 86 /* IEEE: same as above. */ 87 #define _FPU_IEEE 0x037f 88 89 /* Type of the control word. */ 90 typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__))); 91 92 /* Macros for accessing the hardware control word. "*&" is used to 93 work around a bug in older versions of GCC. __volatile__ is used 94 to support combination of writing the control register and reading 95 it back. Without __volatile__, the old value may be used for reading 96 back under compiler optimization. 97 98 Note that the use of these macros is not sufficient anymore with 99 recent hardware nor on x86-64. Some floating point operations are 100 executed in the SSE/SSE2 engines which have their own control and 101 status register. */ 102 #define _FPU_GETCW(cw) __asm__ __volatile__ ("fnstcw %0" : "=m" (*&cw)) 103 #define _FPU_SETCW(cw) __asm__ __volatile__ ("fldcw %0" : : "m" (*&cw)) 104 105 /* Default control word set at startup. */ 106 extern fpu_control_t __fpu_control; 107 108 #endif /* fpu_control.h */
Contact us
|
About us
|
Term of use
|
Copyright © 2000-2025 MyWebUniversity.com ™