Blame sysdeps/aarch64/fpu/fpu_control.h

Packit 6c4009
/* Copyright (C) 1996-2018 Free Software Foundation, Inc.
Packit 6c4009
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public License as
Packit 6c4009
   published by the Free Software Foundation; either version 2.1 of the
Packit 6c4009
   License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#ifndef _AARCH64_FPU_CONTROL_H
Packit 6c4009
#define _AARCH64_FPU_CONTROL_H
Packit 6c4009
Packit 6c4009
#include <features.h>
Packit 6c4009
Packit 6c4009
/* Macros for accessing the FPCR and FPSR.  */
Packit 6c4009
Packit 6c4009
#if __GNUC_PREREQ (6,0)
Packit 6c4009
# define _FPU_GETCW(fpcr) (fpcr = __builtin_aarch64_get_fpcr ())
Packit 6c4009
# define _FPU_SETCW(fpcr) __builtin_aarch64_set_fpcr (fpcr)
Packit 6c4009
# define _FPU_GETFPSR(fpsr) (fpsr = __builtin_aarch64_get_fpsr ())
Packit 6c4009
# define _FPU_SETFPSR(fpsr) __builtin_aarch64_set_fpsr (fpsr)
Packit 6c4009
#else
Packit 6c4009
# define _FPU_GETCW(fpcr) \
Packit 6c4009
  __asm__ __volatile__ ("mrs	%0, fpcr" : "=r" (fpcr))
Packit 6c4009
Packit 6c4009
# define _FPU_SETCW(fpcr) \
Packit 6c4009
  __asm__ __volatile__ ("msr	fpcr, %0" : : "r" (fpcr))
Packit 6c4009
Packit 6c4009
# define _FPU_GETFPSR(fpsr) \
Packit 6c4009
  __asm__ __volatile__ ("mrs	%0, fpsr" : "=r" (fpsr))
Packit 6c4009
Packit 6c4009
# define _FPU_SETFPSR(fpsr) \
Packit 6c4009
  __asm__ __volatile__ ("msr	fpsr, %0" : : "r" (fpsr))
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Reserved bits should be preserved when modifying register
Packit 6c4009
   contents. These two masks indicate which bits in each of FPCR and
Packit 6c4009
   FPSR should not be changed.  */
Packit 6c4009
Packit 6c4009
#define _FPU_RESERVED		0xfe0fe0ff
Packit 6c4009
#define _FPU_FPSR_RESERVED	0x0fffffe0
Packit 6c4009
Packit 6c4009
#define _FPU_DEFAULT		0x00000000
Packit 6c4009
#define _FPU_FPSR_DEFAULT	0x00000000
Packit 6c4009
Packit 6c4009
/* Layout of FPCR and FPSR:
Packit 6c4009
Packit 6c4009
   |       |       |       |       |       |       |       |
Packit 6c4009
   0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0
Packit 6c4009
   s s s s s                                       s     s s s s s
Packit 6c4009
             c c c c c c c               c c c c c
Packit 6c4009
   N Z C V Q A D F R R S S S L L L I U U I U O D I I U U I U O D I
Packit 6c4009
           C H N Z M M T T B E E E D N N X F F Z O D N N X F F Z O
Packit 6c4009
             P     O O R R Z N N N E K K E E E E E C K K C C C C C
Packit 6c4009
                   D D I I P
Packit 6c4009
                   E E D D
Packit 6c4009
                       E E
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
#define _FPU_FPCR_RM_MASK  0xc00000
Packit 6c4009
Packit 6c4009
#define _FPU_FPCR_MASK_IXE 0x1000
Packit 6c4009
#define _FPU_FPCR_MASK_UFE 0x0800
Packit 6c4009
#define _FPU_FPCR_MASK_OFE 0x0400
Packit 6c4009
#define _FPU_FPCR_MASK_DZE 0x0200
Packit 6c4009
#define _FPU_FPCR_MASK_IOE 0x0100
Packit 6c4009
Packit 6c4009
#define _FPU_FPCR_IEEE                       \
Packit 6c4009
  (_FPU_DEFAULT  | _FPU_FPCR_MASK_IXE |	     \
Packit 6c4009
   _FPU_FPCR_MASK_UFE | _FPU_FPCR_MASK_OFE | \
Packit 6c4009
   _FPU_FPCR_MASK_DZE | _FPU_FPCR_MASK_IOE)
Packit 6c4009
Packit 6c4009
#define _FPU_FPSR_IEEE 0
Packit 6c4009
Packit 6c4009
typedef unsigned int fpu_control_t;
Packit 6c4009
typedef unsigned int fpu_fpsr_t;
Packit 6c4009
Packit 6c4009
/* Default control word set at startup.  */
Packit 6c4009
extern fpu_control_t __fpu_control;
Packit 6c4009
Packit 6c4009
#endif