#include #include #include long fun(long x, long y, long z) { long t = x * y - z; return t; } long read_store_ll(long new_val, long *dst) { long old_val = *dst; *dst = new_val; return old_val; } int read_store_ii(int new_val, int *dst) { int old_val = *dst; *dst = new_val; return old_val; } long read_store_il(int new_val, long *dst) { long old_val = *dst; long new_val_l = (long) new_val; *dst = new_val_l; return old_val; } int read_store_li(long new_val, int *dst) { int old_val = *dst; int new_val_i = (int) new_val; *dst = new_val_i; return old_val; } void set_tmin_i(int *dst) { *dst = INT_MIN; } void set_minus72(long *dst) { *dst = -72; } void set_tmin_l(long *dst) { *dst = LONG_MIN; } void swap1(long *xp, long *yp) { long t0 = *xp; long t1 = *yp; *yp = t0; *xp = t1; } long choose(int c) { long t[2] = {-3, 5}; c &= 0x1; return t[c]; } long arith(long x, long y, long z) { long t1 = x-y; long t2 = z+t1; long t3 = x+4; long t4 = y * 48; long t5 = t3 + t4; long rval = t2 * t5; return rval; } long logical1(long x, long y) { long t1 = x^y; long t2 = t1 >> 17; long mask = (-1L << 17) + 7; long rval = t2 & mask; return rval; } long logical2(long x, long y) { long t1 = x^y; long t2 = t1 >> 17; long mask = (1L << 13) - 7; long rval = t2 & mask; return rval; } long mystery(long x, long y, long z) { long t1 = x * z; long t2 = 5 * y; long t3 = t1 & t2; long rval = ~t3; return rval; } int main(int argc, char *argv[]) { long x, y, z, f; if (argc != 4) { printf("Usage: %s x y z\n", argv[0]); } x = strtoul(argv[1], NULL, 0); y = strtoul(argv[2], NULL, 0); z = strtoul(argv[3], NULL, 0); f = fun(x, y, z); printf("f(%ld, %ld, %ld) --> %ld\n", x, y, z, f); printf("y = %ld; ", y); z = read_store_ll(x, &y); printf("read_store_ll(%ld, &y) --> %ld; y = %ld\n", x, z, y); return 0; }