Viewing file: abi-main.h (1.18 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#define FOR_EACH_SCALAR(F) \ F(sc, signed char) \ F(uc, unsigned char) \ F(ss, short) \ F(us, unsigned short) \ F(si, int) \ F(ui, unsigned int) \ F(sl, long) \ F(ul, unsigned long) \ F(sll, long long) \ F(ull, unsigned long long) \ F(f, float) \ F(d, double) \ F(ld, long double) \ F(ptr, void *)
#define EXTERN(SUFFIX, TYPE) extern TYPE x##SUFFIX; #define STATIC(SUFFIX, TYPE) static TYPE s##SUFFIX; #define COMMON(SUFFIX, TYPE) TYPE c##SUFFIX;
#define GETADDR(SUFFIX, TYPE) \ TYPE *get##SUFFIX (int which) \ { \ return (which == 0 ? &c##SUFFIX \ : which == 1 ? &s##SUFFIX \ : &x##SUFFIX); \ }
#define COPY(SUFFIX, TYPE) c##SUFFIX = s##SUFFIX; s##SUFFIX = x##SUFFIX;
FOR_EACH_SCALAR (EXTERN) FOR_EACH_SCALAR (STATIC) FOR_EACH_SCALAR (COMMON)
FOR_EACH_SCALAR (GETADDR)
void copy (void) { FOR_EACH_SCALAR (COPY); }
extern void foo (int);
void sibcall1 (void) { foo (1); }
void sibcall2 (void) { foo (csi + ssi + xsi); }
static void sibcall3 (void) { foo (1); foo (2); foo (3); }
extern void bar (void (*) (void));
int nested (int x) { void sub (void) { foo (x); } bar (sub); bar (sibcall3); return 1; }
|