You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.8 KiB
41 lines
1.8 KiB
#ifndef COSMOPOLITAN_LIBC_MACROS_H_ |
|
#define COSMOPOLITAN_LIBC_MACROS_H_ |
|
#if 0 |
|
/*───────────────────────────────────────────────────────────────────────────│─╗ |
|
│ cosmopolitan § macros ─╬─│┼ |
|
╚────────────────────────────────────────────────────────────────────────────│*/ |
|
#endif |
|
|
|
/** |
|
* @fileoverview Common C preprocessor, assembler, and linker macros. |
|
* |
|
* @see libc/bits/safemacros.h which it's really complicated |
|
*/ |
|
|
|
#define TRUE 1 |
|
#define FALSE 0 |
|
|
|
#define ROUNDUP(X, K) (((X) + ((K)-1)) & ~((K)-1)) |
|
#define ROUNDDOWN(X, K) ((X) & -(K)) |
|
#define ABS(X) ((X) >= 0 ? (X) : -(X)) |
|
#define MIN(X, Y) ((Y) > (X) ? (X) : (Y)) |
|
#define MAX(X, Y) ((Y) < (X) ? (X) : (Y)) |
|
#define PASTE(A, B) __PASTE(A, B) |
|
#define STRINGIFY(A) __STRINGIFY(A) |
|
#define EQUIVALENT(X, Y) (isconstant((X) == (Y)) && ((X) == (Y))) |
|
#define TYPE_BIT(type) (sizeof(type) * CHAR_BIT) |
|
#define TYPE_SIGNED(type) (((type)-1) < 0) |
|
#define TYPE_INTEGRAL(type) (((type)0.5) != 0.5) |
|
#define INT_STRLEN_MAXIMUM(type) \ |
|
((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type)) |
|
|
|
#define ARRAYLEN(A) \ |
|
((sizeof(A) / sizeof(*(A))) / ((unsigned)!(sizeof(A) % sizeof(*(A))))) |
|
|
|
#define __STRINGIFY(A) #A |
|
#define __PASTE(A, B) A##B |
|
#ifdef __ASSEMBLER__ |
|
#include "libc/macros-cpp.inc" |
|
#include "libc/macros.inc" |
|
#endif /* __ASSEMBLER__ */ |
|
#endif /* COSMOPOLITAN_LIBC_MACROS_H_ */
|
|
|