1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Machine-dependent software floating-point definitions. 4*4882a593Smuzhiyun SuperH kernel version. 5*4882a593Smuzhiyun Copyright (C) 1997,1998,1999 Free Software Foundation, Inc. 6*4882a593Smuzhiyun This file is part of the GNU C Library. 7*4882a593Smuzhiyun Contributed by Richard Henderson (rth@cygnus.com), 8*4882a593Smuzhiyun Jakub Jelinek (jj@ultra.linux.cz), 9*4882a593Smuzhiyun David S. Miller (davem@redhat.com) and 10*4882a593Smuzhiyun Peter Maydell (pmaydell@chiark.greenend.org.uk). 11*4882a593Smuzhiyun */ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #ifndef _SFP_MACHINE_H 14*4882a593Smuzhiyun #define _SFP_MACHINE_H 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #ifdef __BIG_ENDIAN__ 17*4882a593Smuzhiyun #define __BYTE_ORDER __BIG_ENDIAN 18*4882a593Smuzhiyun #define __LITTLE_ENDIAN 0 19*4882a593Smuzhiyun #else 20*4882a593Smuzhiyun #define __BYTE_ORDER __LITTLE_ENDIAN 21*4882a593Smuzhiyun #define __BIG_ENDIAN 0 22*4882a593Smuzhiyun #endif 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define _FP_W_TYPE_SIZE 32 25*4882a593Smuzhiyun #define _FP_W_TYPE unsigned long 26*4882a593Smuzhiyun #define _FP_WS_TYPE signed long 27*4882a593Smuzhiyun #define _FP_I_TYPE long 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define _FP_MUL_MEAT_S(R,X,Y) \ 30*4882a593Smuzhiyun _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) 31*4882a593Smuzhiyun #define _FP_MUL_MEAT_D(R,X,Y) \ 32*4882a593Smuzhiyun _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) 33*4882a593Smuzhiyun #define _FP_MUL_MEAT_Q(R,X,Y) \ 34*4882a593Smuzhiyun _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv(S,R,X,Y) 37*4882a593Smuzhiyun #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) 38*4882a593Smuzhiyun #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) 41*4882a593Smuzhiyun #define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 42*4882a593Smuzhiyun #define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 43*4882a593Smuzhiyun #define _FP_NANSIGN_S 0 44*4882a593Smuzhiyun #define _FP_NANSIGN_D 0 45*4882a593Smuzhiyun #define _FP_NANSIGN_Q 0 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define _FP_KEEPNANFRACP 1 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* 50*4882a593Smuzhiyun * If one NaN is signaling and the other is not, 51*4882a593Smuzhiyun * we choose that one, otherwise we choose X. 52*4882a593Smuzhiyun */ 53*4882a593Smuzhiyun #define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ 54*4882a593Smuzhiyun do { \ 55*4882a593Smuzhiyun if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ 56*4882a593Smuzhiyun && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ 57*4882a593Smuzhiyun { \ 58*4882a593Smuzhiyun R##_s = Y##_s; \ 59*4882a593Smuzhiyun _FP_FRAC_COPY_##wc(R,Y); \ 60*4882a593Smuzhiyun } \ 61*4882a593Smuzhiyun else \ 62*4882a593Smuzhiyun { \ 63*4882a593Smuzhiyun R##_s = X##_s; \ 64*4882a593Smuzhiyun _FP_FRAC_COPY_##wc(R,X); \ 65*4882a593Smuzhiyun } \ 66*4882a593Smuzhiyun R##_c = FP_CLS_NAN; \ 67*4882a593Smuzhiyun } while (0) 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun //#define FP_ROUNDMODE FPSCR_RM 70*4882a593Smuzhiyun #define FP_DENORM_ZERO 1/*FPSCR_DN*/ 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* Exception flags. */ 73*4882a593Smuzhiyun #define FP_EX_INVALID (1<<4) 74*4882a593Smuzhiyun #define FP_EX_DIVZERO (1<<3) 75*4882a593Smuzhiyun #define FP_EX_OVERFLOW (1<<2) 76*4882a593Smuzhiyun #define FP_EX_UNDERFLOW (1<<1) 77*4882a593Smuzhiyun #define FP_EX_INEXACT (1<<0) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #endif 80*4882a593Smuzhiyun 81