xref: /openbmc/linux/arch/arm/nwfpe/ARM-gcc.h (revision b2441318)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds -------------------------------------------------------------------------------
41da177e4SLinus Torvalds The macro `BITS64' can be defined to indicate that 64-bit integer types are
51da177e4SLinus Torvalds supported by the compiler.
61da177e4SLinus Torvalds -------------------------------------------------------------------------------
71da177e4SLinus Torvalds */
81da177e4SLinus Torvalds #define BITS64
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds /*
111da177e4SLinus Torvalds -------------------------------------------------------------------------------
121da177e4SLinus Torvalds Each of the following `typedef's defines the most convenient type that holds
131da177e4SLinus Torvalds integers of at least as many bits as specified.  For example, `uint8' should
141da177e4SLinus Torvalds be the most convenient type that can hold unsigned integers of as many as
151da177e4SLinus Torvalds 8 bits.  The `flag' type must be able to hold either a 0 or 1.  For most
161da177e4SLinus Torvalds implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed
171da177e4SLinus Torvalds to the same as `int'.
181da177e4SLinus Torvalds -------------------------------------------------------------------------------
191da177e4SLinus Torvalds */
201da177e4SLinus Torvalds typedef char flag;
211da177e4SLinus Torvalds typedef unsigned char uint8;
221da177e4SLinus Torvalds typedef signed char int8;
231da177e4SLinus Torvalds typedef int uint16;
241da177e4SLinus Torvalds typedef int int16;
251da177e4SLinus Torvalds typedef unsigned int uint32;
261da177e4SLinus Torvalds typedef signed int int32;
271da177e4SLinus Torvalds #ifdef BITS64
281da177e4SLinus Torvalds typedef unsigned long long int bits64;
291da177e4SLinus Torvalds typedef signed long long int sbits64;
301da177e4SLinus Torvalds #endif
311da177e4SLinus Torvalds 
321da177e4SLinus Torvalds /*
331da177e4SLinus Torvalds -------------------------------------------------------------------------------
341da177e4SLinus Torvalds Each of the following `typedef's defines a type that holds integers
351da177e4SLinus Torvalds of _exactly_ the number of bits specified.  For instance, for most
361da177e4SLinus Torvalds implementation of C, `bits16' and `sbits16' should be `typedef'ed to
371da177e4SLinus Torvalds `unsigned short int' and `signed short int' (or `short int'), respectively.
381da177e4SLinus Torvalds -------------------------------------------------------------------------------
391da177e4SLinus Torvalds */
401da177e4SLinus Torvalds typedef unsigned char bits8;
411da177e4SLinus Torvalds typedef signed char sbits8;
421da177e4SLinus Torvalds typedef unsigned short int bits16;
431da177e4SLinus Torvalds typedef signed short int sbits16;
441da177e4SLinus Torvalds typedef unsigned int bits32;
451da177e4SLinus Torvalds typedef signed int sbits32;
461da177e4SLinus Torvalds #ifdef BITS64
471da177e4SLinus Torvalds typedef unsigned long long int uint64;
481da177e4SLinus Torvalds typedef signed long long int int64;
491da177e4SLinus Torvalds #endif
501da177e4SLinus Torvalds 
511da177e4SLinus Torvalds #ifdef BITS64
521da177e4SLinus Torvalds /*
531da177e4SLinus Torvalds -------------------------------------------------------------------------------
541da177e4SLinus Torvalds The `LIT64' macro takes as its argument a textual integer literal and if
551da177e4SLinus Torvalds necessary ``marks'' the literal as having a 64-bit integer type.  For
561da177e4SLinus Torvalds example, the Gnu C Compiler (`gcc') requires that 64-bit literals be
571da177e4SLinus Torvalds appended with the letters `LL' standing for `long long', which is `gcc's
581da177e4SLinus Torvalds name for the 64-bit integer type.  Some compilers may allow `LIT64' to be
591da177e4SLinus Torvalds defined as the identity macro:  `#define LIT64( a ) a'.
601da177e4SLinus Torvalds -------------------------------------------------------------------------------
611da177e4SLinus Torvalds */
621da177e4SLinus Torvalds #define LIT64( a ) a##LL
631da177e4SLinus Torvalds #endif
641da177e4SLinus Torvalds 
651da177e4SLinus Torvalds /*
661da177e4SLinus Torvalds -------------------------------------------------------------------------------
671da177e4SLinus Torvalds The macro `INLINE' can be used before functions that should be inlined.  If
681da177e4SLinus Torvalds a compiler does not support explicit inlining, this macro should be defined
691da177e4SLinus Torvalds to be `static'.
701da177e4SLinus Torvalds -------------------------------------------------------------------------------
711da177e4SLinus Torvalds */
7238598105SAdrian Bunk #define INLINE static inline
731da177e4SLinus Torvalds 
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds /* For use as a GCC soft-float library we need some special function names. */
761da177e4SLinus Torvalds 
771da177e4SLinus Torvalds #ifdef __LIBFLOAT__
781da177e4SLinus Torvalds 
791da177e4SLinus Torvalds /* Some 32-bit ops can be mapped straight across by just changing the name. */
801da177e4SLinus Torvalds #define float32_add			__addsf3
811da177e4SLinus Torvalds #define float32_sub			__subsf3
821da177e4SLinus Torvalds #define float32_mul			__mulsf3
831da177e4SLinus Torvalds #define float32_div			__divsf3
841da177e4SLinus Torvalds #define int32_to_float32		__floatsisf
851da177e4SLinus Torvalds #define float32_to_int32_round_to_zero	__fixsfsi
861da177e4SLinus Torvalds #define float32_to_uint32_round_to_zero	__fixunssfsi
871da177e4SLinus Torvalds 
881da177e4SLinus Torvalds /* These ones go through the glue code.  To avoid namespace pollution
891da177e4SLinus Torvalds    we rename the internal functions too.  */
901da177e4SLinus Torvalds #define float32_eq			___float32_eq
911da177e4SLinus Torvalds #define float32_le			___float32_le
921da177e4SLinus Torvalds #define float32_lt			___float32_lt
931da177e4SLinus Torvalds 
941da177e4SLinus Torvalds /* All the 64-bit ops have to go through the glue, so we pull the same
951da177e4SLinus Torvalds    trick.  */
961da177e4SLinus Torvalds #define float64_add			___float64_add
971da177e4SLinus Torvalds #define float64_sub			___float64_sub
981da177e4SLinus Torvalds #define float64_mul			___float64_mul
991da177e4SLinus Torvalds #define float64_div			___float64_div
1001da177e4SLinus Torvalds #define int32_to_float64		___int32_to_float64
1011da177e4SLinus Torvalds #define float64_to_int32_round_to_zero	___float64_to_int32_round_to_zero
1021da177e4SLinus Torvalds #define float64_to_uint32_round_to_zero	___float64_to_uint32_round_to_zero
1031da177e4SLinus Torvalds #define float64_to_float32		___float64_to_float32
1041da177e4SLinus Torvalds #define float32_to_float64		___float32_to_float64
1051da177e4SLinus Torvalds #define float64_eq			___float64_eq
1061da177e4SLinus Torvalds #define float64_le			___float64_le
1071da177e4SLinus Torvalds #define float64_lt			___float64_lt
1081da177e4SLinus Torvalds 
1091da177e4SLinus Torvalds #if 0
1101da177e4SLinus Torvalds #define float64_add			__adddf3
1111da177e4SLinus Torvalds #define float64_sub			__subdf3
1121da177e4SLinus Torvalds #define float64_mul			__muldf3
1131da177e4SLinus Torvalds #define float64_div			__divdf3
1141da177e4SLinus Torvalds #define int32_to_float64		__floatsidf
1151da177e4SLinus Torvalds #define float64_to_int32_round_to_zero	__fixdfsi
1161da177e4SLinus Torvalds #define float64_to_uint32_round_to_zero	__fixunsdfsi
1171da177e4SLinus Torvalds #define float64_to_float32		__truncdfsf2
1181da177e4SLinus Torvalds #define float32_to_float64		__extendsfdf2
1191da177e4SLinus Torvalds #endif
1201da177e4SLinus Torvalds 
1211da177e4SLinus Torvalds #endif
122