--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return u;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(v, NULL) == v[0]);
+
--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return this.u;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(v, NULL) == v[0]);
+
--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return v;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(v, NULL) == v[1]);
+
--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return w;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(v, NULL) == v[2]);
+
--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return x;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(v, NULL) == v[3]);
+
--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return this.x;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(v, NULL) == v[3]);
+
--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return a.v;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(NULL, v) == v[1]);
+
--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return a.w;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(NULL, v) == v[2]);
+
--- /dev/null
+struct
+ u v w x y z
+end;
+
+method f(a)
+ return (a - (-8 * 4) ).v;
+end;
+
--- /dev/null
+long f(long *, long *);
+
+long v[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
+
+RET(f(NULL, v) == v[5]);
+
--- /dev/null
+method f(a b)
+ return a - b;
+end;
--- /dev/null
+long f(long, long, long);
+
+RET(f(0, 20, 10) == 10 &&
+ f(0, 10, 20) == -10);
--- /dev/null
+method f(a b)
+ return 20 - b;
+end;
--- /dev/null
+long f(long, long, long);
+
+RET(f(0, 0, 10) == 10 &&
+ f(0, 0, 20) == 0 &&
+ f(0, 0, 30) == -10);
--- /dev/null
+method f(a b)
+ return b - 20;
+end;
--- /dev/null
+long f(long, long, long);
+
+RET(f(0, 0, 10) == -10 &&
+ f(0, 0, 20) == 0 &&
+ f(0, 0, 30) == 10);
--- /dev/null
+method f(a b)
+ return a - (10 - b) - 20;
+end;
--- /dev/null
+long f(long, long, long);
+
+RET(f(0, 10, 20) == (10 - (10 - 20) - 20) &&
+ f(0, 40, 20) == (40 - (10 - 20) - 20) &&
+ f(0, 0, 30) == ( 0 - (10 - 30) - 20));
--- /dev/null
+method f1(a b)
+ return a - (-1 * b);
+end;
+
+method f2(a b)
+ return a - (-2 * b);
+end;
+
+method f4(a b)
+ return a - (-4 * b);
+end;
+
+method f8(a b)
+ return a - (-8 * b);
+end;
+
+method f(a b c d)
+ return a - (-8 * (b - (-4 * (c - (-2 * d)))));
+end;
--- /dev/null
+#define F1(a,b) ((long)(a) - (-1UL * (long)(b)))
+#define F2(a,b) ((long)(a) - (-2UL * (long)(b)))
+#define F4(a,b) ((long)(a) - (-4UL * (long)(b)))
+#define F8(a,b) ((long)(a) - (-8UL * (long)(b)))
+#define F(a,b,c,d) ((long)(a) - (-8UL * ((long)(b) - (-4UL * ((long)(c) - (-2UL * (long)(d)))))))
+
+long f1(long, long, long);
+long f2(long, long, long);
+long f4(long, long, long);
+long f8(long, long, long);
+long f(long, long, long, long, long);
+
+RET(f1(0, 3, 20) == F1( 3, 20) &&
+ f1(0, -100, 80) == F1(-100, 80) &&
+ f1(0, 50, -9) == F1( 50, -9) &&
+ f1(0, -77, -50) == F1( -77, -50) &&
+
+ f2(0, 3, 20) == F2( 3, 20) &&
+ f2(0, -100, 80) == F2(-100, 80) &&
+ f2(0, 50, -9) == F2( 50, -9) &&
+ f2(0, -77, -50) == F2( -77, -50) &&
+
+ f4(0, 3, 20) == F4( 3, 20) &&
+ f4(0, -100, 80) == F4(-100, 80) &&
+ f4(0, 50, -9) == F4( 50, -9) &&
+ f4(0, -77, -50) == F4( -77, -50) &&
+
+ f8(0, 3, 20) == F8( 3, 20) &&
+ f8(0, -100, 80) == F8(-100, 80) &&
+ f8(0, 50, -9) == F8( 50, -9) &&
+ f8(0, -77, -50) == F8( -77, -50) &&
+
+ f(0, 10, 20, 30, 40) == F( 10, 20, 30, 40) &&
+ f(0, -10, 20, -30, 40) == F(-10, 20, -30, 40) &&
+ f(0, 10, -20, 30, -40) == F( 10, -20, 30, -40) &&
+ f(0, -10, -20, -30, -40) == F(-10, -20, -30, -40) &&
+
+ f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+ F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+ f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+ F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+ f4(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+ F4(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+ f8(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+ F8(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+ f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+ F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+ f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+ F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+ f4(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+ F4(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+ f8(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+ F8(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL));
+
--- /dev/null
+method f1(a b)
+ return a - (b * -1);
+end;
+
+method f2(a b)
+ return a - (b * -2);
+end;
+
+method f4(a b)
+ return a - (b * -4);
+end;
+
+method f8(a b)
+ return a - (b * -8);
+end;
+
+method f(a b c d)
+ return a - ((b - ((c - (d * -2)) * -4)) * -8);
+end;
--- /dev/null
+#define F1(a,b) ((long)(a) - (-1UL * (long)(b)))
+#define F2(a,b) ((long)(a) - (-2UL * (long)(b)))
+#define F4(a,b) ((long)(a) - (-4UL * (long)(b)))
+#define F8(a,b) ((long)(a) - (-8UL * (long)(b)))
+#define F(a,b,c,d) ((long)(a) - (-8UL * ((long)(b) - (-4UL * ((long)(c) - (-2UL * (long)(d)))))))
+
+long f1(long, long, long);
+long f2(long, long, long);
+long f4(long, long, long);
+long f8(long, long, long);
+long f(long, long, long, long, long);
+
+RET(f1(0, 3, 20) == F1( 3, 20) &&
+ f1(0, -100, 80) == F1(-100, 80) &&
+ f1(0, 50, -9) == F1( 50, -9) &&
+ f1(0, -77, -50) == F1( -77, -50) &&
+
+ f2(0, 3, 20) == F2( 3, 20) &&
+ f2(0, -100, 80) == F2(-100, 80) &&
+ f2(0, 50, -9) == F2( 50, -9) &&
+ f2(0, -77, -50) == F2( -77, -50) &&
+
+ f4(0, 3, 20) == F4( 3, 20) &&
+ f4(0, -100, 80) == F4(-100, 80) &&
+ f4(0, 50, -9) == F4( 50, -9) &&
+ f4(0, -77, -50) == F4( -77, -50) &&
+
+ f8(0, 3, 20) == F8( 3, 20) &&
+ f8(0, -100, 80) == F8(-100, 80) &&
+ f8(0, 50, -9) == F8( 50, -9) &&
+ f8(0, -77, -50) == F8( -77, -50) &&
+
+ f(0, 10, 20, 30, 40) == F( 10, 20, 30, 40) &&
+ f(0, -10, 20, -30, 40) == F(-10, 20, -30, 40) &&
+ f(0, 10, -20, 30, -40) == F( 10, -20, 30, -40) &&
+ f(0, -10, -20, -30, -40) == F(-10, -20, -30, -40) &&
+
+ f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+ F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+ f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+ F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+ f4(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+ F4(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+ f8(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+ F8(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+ f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+ F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+ f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+ F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+ f4(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+ F4(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+ f8(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+ F8(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL));
+
--- /dev/null
+method f(a b)
+ return (a or 0x0A) or (0x50 or b);
+end;
--- /dev/null
+long f(long, long, long);
+
+RET(f(0, 0x00, 0x00) == 0x5A);
+
--- /dev/null
+method f(a b)
+ return (a = 0x0A) = (0x50 = b);
+end;
--- /dev/null
+long f(long, long, long);
+
+RET(f(0, 0x00, 0x00) == 1 &&
+ f(0, 0x0A, 0xFF) == 0 &&
+ f(0, 0xFF, 0x50) == 0 &&
+ f(0, 0x0A, 0x50) == 1);
+
--- /dev/null
+method f(a)
+ return (a < 0x0A);
+end;
+
+method g(a)
+ return (0x0A < a);
+end;
+
+method h()
+ return (0x0A < 0x09);
+end;
+
+method i()
+ return (0x0A < 0x0B);
+end;
+
--- /dev/null
+long f(long, long);
+long g(long, long);
+long h(long);
+long i(long);
+
+RET(f(0, 0x05) == 1 &&
+ f(0, -0x05) == 1 &&
+ f(0, 0x0A) == 0 &&
+ f(0, 0x0B) == 0 &&
+
+ g(0, 0x05) == 0 &&
+ g(0, -0x05) == 0 &&
+ g(0, 0x0A) == 0 &&
+ g(0, 0x0B) == 1 &&
+
+ h(0) == 0 &&
+ i(0) == 1);
+