Blame view
arch/arc/lib/libgcc2.h
3.77 KB
d41ce506b Initial Release, ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
/* * Copyright (C) 1989-2013 Free Software Foundation, Inc. * * SPDX-License-Identifier: GPL-2.0+ */ #ifndef __ASM_LIBGCC_H #define __ASM_LIBGCC_H #define UNITS_PER_WORD 4 /* for ARC */ #define BITS_PER_UNIT 8 /* for ARC */ #define W_TYPE_SIZE (4 * BITS_PER_UNIT) #define MIN_UNITS_PER_WORD UNITS_PER_WORD /* Work out the largest "word" size that we can deal with on this target. */ #if MIN_UNITS_PER_WORD > 4 # define LIBGCC2_MAX_UNITS_PER_WORD 8 #elif (MIN_UNITS_PER_WORD > 2 \ || (MIN_UNITS_PER_WORD > 1 && __SIZEOF_LONG_LONG__ > 4)) # define LIBGCC2_MAX_UNITS_PER_WORD 4 #else # define LIBGCC2_MAX_UNITS_PER_WORD MIN_UNITS_PER_WORD #endif /* Work out what word size we are using for this compilation. The value can be set on the command line. */ #ifndef LIBGCC2_UNITS_PER_WORD #define LIBGCC2_UNITS_PER_WORD LIBGCC2_MAX_UNITS_PER_WORD #endif typedef int QItype __attribute__ ((mode (QI))); typedef unsigned int UQItype __attribute__ ((mode (QI))); typedef int HItype __attribute__ ((mode (HI))); typedef unsigned int UHItype __attribute__ ((mode (HI))); #if MIN_UNITS_PER_WORD > 1 /* These typedefs are usually forbidden on dsp's with UNITS_PER_WORD 1. */ typedef int SItype __attribute__ ((mode (SI))); typedef unsigned int USItype __attribute__ ((mode (SI))); #if __SIZEOF_LONG_LONG__ > 4 /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2. */ typedef int DItype __attribute__ ((mode (DI))); typedef unsigned int UDItype __attribute__ ((mode (DI))); #if MIN_UNITS_PER_WORD > 4 /* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4. */ typedef int TItype __attribute__ ((mode (TI))); typedef unsigned int UTItype __attribute__ ((mode (TI))); #endif #endif #endif #if LIBGCC2_UNITS_PER_WORD == 8 #define W_TYPE_SIZE (8 * BITS_PER_UNIT) #define Wtype DItype #define UWtype UDItype #define HWtype DItype #define UHWtype UDItype #define DWtype TItype #define UDWtype UTItype #ifdef LIBGCC2_GNU_PREFIX #define __NW(a,b) __gnu_ ## a ## di ## b #define __NDW(a,b) __gnu_ ## a ## ti ## b #else #define __NW(a,b) __ ## a ## di ## b #define __NDW(a,b) __ ## a ## ti ## b #endif #elif LIBGCC2_UNITS_PER_WORD == 4 #define W_TYPE_SIZE (4 * BITS_PER_UNIT) #define Wtype SItype #define UWtype USItype #define HWtype SItype #define UHWtype USItype #define DWtype DItype #define UDWtype UDItype #ifdef LIBGCC2_GNU_PREFIX #define __NW(a,b) __gnu_ ## a ## si ## b #define __NDW(a,b) __gnu_ ## a ## di ## b #else #define __NW(a,b) __ ## a ## si ## b #define __NDW(a,b) __ ## a ## di ## b #endif #elif LIBGCC2_UNITS_PER_WORD == 2 #define W_TYPE_SIZE (2 * BITS_PER_UNIT) #define Wtype HItype #define UWtype UHItype #define HWtype HItype #define UHWtype UHItype #define DWtype SItype #define UDWtype USItype #ifdef LIBGCC2_GNU_PREFIX #define __NW(a,b) __gnu_ ## a ## hi ## b #define __NDW(a,b) __gnu_ ## a ## si ## b #else #define __NW(a,b) __ ## a ## hi ## b #define __NDW(a,b) __ ## a ## si ## b #endif #else #define W_TYPE_SIZE BITS_PER_UNIT #define Wtype QItype #define UWtype UQItype #define HWtype QItype #define UHWtype UQItype #define DWtype HItype #define UDWtype UHItype #ifdef LIBGCC2_GNU_PREFIX #define __NW(a,b) __gnu_ ## a ## qi ## b #define __NDW(a,b) __gnu_ ## a ## hi ## b #else #define __NW(a,b) __ ## a ## qi ## b #define __NDW(a,b) __ ## a ## hi ## b #endif #endif typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__))); #if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ struct DWstruct {Wtype high, low;}; #else struct DWstruct {Wtype low, high;}; #endif /* We need this union to unpack/pack DImode values, since we don't have any arithmetic yet. Incoming DImode parameters are stored into the `ll' field, and the unpacked result is read from the struct `s'. */ typedef union { struct DWstruct s; DWtype ll; } DWunion; #endif /* __ASM_LIBGCC_H */ |