Viewing file: defines.h (3.79 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#ifndef DEFINED_DEFINES_H #define DEFINED_DEFINES_H
/* Get __m64 and __m128. */ #include <xmmintrin.h>
typedef unsigned long ulong; typedef long double ldouble;
/* These defines determines what part of the test should be run. When GCC implements these parts, the defines should be uncommented to enable testing. */
/* Scalar type __int128. */ /* #define CHECK_INT128 */
/* Scalar type long double. */ #define CHECK_LONG_DOUBLE
/* Scalar type __float128. */ /* #define CHECK_FLOAT128 */
/* Scalar types __m64 and __m128. */ #define CHECK_M64_M128
/* Returning of complex type. */ #define CHECK_COMPLEX
/* Structs with size >= 16. */ #define CHECK_LARGER_STRUCTS
/* Checks for passing floats and doubles. */ #define CHECK_FLOAT_DOUBLE_PASSING
/* Union passing with not-extremely-simple unions. */ #define CHECK_LARGER_UNION_PASSING
/* Variable args. */ #define CHECK_VARARGS
/* Check argument passing and returning for scalar types with sizeof = 16. */ /* TODO: Implement these tests. Don't activate them for now. */ #define CHECK_LARGE_SCALAR_PASSING
/* Defines for sizing and alignment. */
#define TYPE_SIZE_CHAR 1 #define TYPE_SIZE_SHORT 2 #define TYPE_SIZE_INT 4 #define TYPE_SIZE_LONG 8 #define TYPE_SIZE_LONG_LONG 8 #define TYPE_SIZE_INT128 16 #define TYPE_SIZE_FLOAT 4 #define TYPE_SIZE_DOUBLE 8 #define TYPE_SIZE_LONG_DOUBLE 16 #define TYPE_SIZE_FLOAT128 16 #define TYPE_SIZE_M64 8 #define TYPE_SIZE_M128 16 #define TYPE_SIZE_ENUM 4 #define TYPE_SIZE_POINTER 8
#define TYPE_ALIGN_CHAR 1 #define TYPE_ALIGN_SHORT 2 #define TYPE_ALIGN_INT 4 #define TYPE_ALIGN_LONG 8 #define TYPE_ALIGN_LONG_LONG 8 #define TYPE_ALIGN_INT128 16 #define TYPE_ALIGN_FLOAT 4 #define TYPE_ALIGN_DOUBLE 8 #define TYPE_ALIGN_LONG_DOUBLE 16 #define TYPE_ALIGN_FLOAT128 16 #define TYPE_ALIGN_M64 8 #define TYPE_ALIGN_M128 16 #define TYPE_ALIGN_ENUM 4 #define TYPE_ALIGN_POINTER 8
/* These defines control the building of the list of types to check. There is a string identifying the type (with a comma after), a size of the type (also with a comma and an integer for adding to the total amount of types) and an alignment of the type (which is currently not really needed since the abi specifies that alignof == sizeof for all scalar types). */ #ifdef CHECK_INT128 #define CI128_STR "__int128", #define CI128_SIZ TYPE_SIZE_INT128, #define CI128_ALI TYPE_ALIGN_INT128, #define CI128_RET "???", #else #define CI128_STR #define CI128_SIZ #define CI128_ALI #define CI128_RET #endif #ifdef CHECK_LONG_DOUBLE #define CLD_STR "long double", #define CLD_SIZ TYPE_SIZE_LONG_DOUBLE, #define CLD_ALI TYPE_ALIGN_LONG_DOUBLE, #define CLD_RET "x87_regs[0]._ldouble", #else #define CLD_STR #define CLD_SIZ #define CLD_ALI #define CLD_RET #endif #ifdef CHECK_FLOAT128 #define CF128_STR "__float128", #define CF128_SIZ TYPE_SIZE_FLOAT128, #define CF128_ALI TYPE_ALIGN_FLOAT128, #define CF128_RET "???", #else #define CF128_STR #define CF128_SIZ #define CF128_ALI #define CF128_RET #endif #ifdef CHECK_M64_M128 #define CMM_STR "__m64", "__m128", #define CMM_SIZ TYPE_SIZE_M64, TYPE_SIZE_M128, #define CMM_ALI TYPE_ALIGN_M64, TYPE_ALIGN_M128, #define CMM_RET "???", "???", #else #define CMM_STR #define CMM_SIZ #define CMM_ALI #define CMM_RET #endif
/* Used in size and alignment tests. */ enum dummytype { enumtype };
extern void abort (void);
/* Assertion macro. */ #define assert(test) if (!(test)) abort()
#ifdef __GNUC__ #define ATTRIBUTE_UNUSED __attribute__((__unused__)) #else #define ATTRIBUTE_UNUSED #endif
#ifdef __GNUC__ #define PACKED __attribute__((__packed__)) #else #warning Some tests will fail due to missing __packed__ support #define PACKED #endif
#endif /* DEFINED_DEFINES_H */
|