#define PRE_STORE(T, ATTR) \ ATTR T * \ T ## _pre_store (T *p, T v) \ { \ *++p = v; \ return p; \ } \ #define POST_STORE(T, ATTR) \ ATTR T * \ T ## _post_store (T *p, T v) \ { \ *p++ = v; \ return p; \ } #define POST_STORE_VEC(T, VT, OP, ATTR) \ ATTR T * \ VT ## _post_store (T * p, VT v) \ { \ OP (p, v); \ p += sizeof (VT) / sizeof (T); \ return p; \ } #define PRE_LOAD(T, ATTR) \ ATTR void \ T ## _pre_load (T *p) \ { \ ATTR extern void f ## T (T*,T); \ T x = *++p; \ f ## T (p, x); \ } #define POST_LOAD(T, ATTR) \ ATTR void \ T ## _post_load (T *p) \ { \ ATTR extern void f ## T (T*,T); \ T x = *p++; \ f ## T (p, x); \ } #define POST_LOAD_VEC(T, VT, OP, ATTR) \ ATTR void \ VT ## _post_load (T * p) \ { \ ATTR extern void f ## T (T*,T); \ VT x = OP (p, v); \ p += sizeof (VT) / sizeof (T); \ f ## T (p, x); \ }