/* More subroutines needed by GCC output code on some machines. */ /* Compile this one with gcc. */ #include "config.h" #include <stddef.h> #ifndef SItype #define SItype long int #endif /* long long ints are pairs of long ints in the order determined by WORDS_BIG_ENDIAN. */ #ifdef WORDS_BIG_ENDIAN struct longlong {long high, low;}; #else struct longlong {long low, high;}; #endif /* We need this union to unpack/pack longlongs, since we don't have any arithmetic yet. Incoming long long parameters are stored into the `ll' field, and the unpacked result is read from the struct longlong. */ typedef union { struct longlong s; long long ll; SItype i[2]; unsigned SItype ui[2]; } long_long; /* Internally, long long ints are strings of unsigned shorts in the order determined by BYTES_BIG_ENDIAN. */ #define B 0x10000 #define low16 (B - 1) #ifdef BYTES_BIG_ENDIAN /* Note that HIGH and LOW do not describe the order of words in a long long. They describe the order of words in vectors ordered according to the byte order. */ #define HIGH 0 #define LOW 1 #define big_end(n) 0 #define little_end(n) ((n) - 1) #define next_msd(i) ((i) - 1) #define next_lsd(i) ((i) + 1) #define is_not_msd(i,n) ((i) >= 0) #define is_not_lsd(i,n) ((i) < (n)) #else #define LOW 0 #define HIGH 1 #define big_end(n) ((n) - 1) #define little_end(n) 0 #define next_msd(i) ((i) + 1) #define next_lsd(i) ((i) - 1) #define is_not_msd(i,n) ((i) < (n)) #define is_not_lsd(i,n) ((i) >= 0) #endif