(root)/
gcc-13.2.0/
libgcc/
config/
i386/
crtprec.c
       1  /*
       2   * Copyright (C) 2007-2023 Free Software Foundation, Inc.
       3   *
       4   * This file is free software; you can redistribute it and/or modify it
       5   * under the terms of the GNU General Public License as published by the
       6   * Free Software Foundation; either version 3, or (at your option) any
       7   * later version.
       8   * 
       9   * This file is distributed in the hope that it will be useful, but
      10   * WITHOUT ANY WARRANTY; without even the implied warranty of
      11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12   * General Public License for more details.
      13   * 
      14   * Under Section 7 of GPL version 3, you are granted additional
      15   * permissions described in the GCC Runtime Library Exception, version
      16   * 3.1, as published by the Free Software Foundation.
      17   *
      18   * You should have received a copy of the GNU General Public License and
      19   * a copy of the GCC Runtime Library Exception along with this program;
      20   * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
      21   * <http://www.gnu.org/licenses/>.
      22   */
      23  
      24  #ifndef _SOFT_FLOAT
      25  #if __PREC == 32
      26   #define X87CW		(0 << 8)	/* Single precision (24 bits) */
      27  #elif __PREC == 64
      28   #define X87CW		(2 << 8)	/* Double precision (53 bits) */
      29  #elif __PREC == 80
      30   #define X87CW		(3 << 8)	/* Extended precision (64 bits) */
      31  #else
      32   #error "Wrong precision requested."
      33  #endif
      34  
      35  #define X87CW_PCMASK	(3 << 8)
      36  
      37  static void __attribute__((constructor))
      38  set_precision (void)
      39  {
      40    unsigned short int cwd;
      41  
      42    asm volatile ("fnstcw\t%0" : "=m" (cwd));
      43  
      44    cwd &= ~X87CW_PCMASK;
      45    cwd |= X87CW;
      46  
      47    asm volatile ("fldcw\t%0" : : "m" (cwd));
      48  }
      49  #endif