Some testcasees based on mrstrcmp_12/13
authorMartin Perner <martin@perner.cc>
Mon, 17 May 2010 17:12:24 +0000 (19:12 +0200)
committerMartin Perner <martin@perner.cc>
Mon, 17 May 2010 17:12:24 +0000 (19:12 +0200)
Testing if the code also works with faktors that are not valid scales
for lea
Also tests other trees where lea can be applied

33 files changed:
codea/skinner33_04.0 [new file with mode: 0644]
codea/skinner33_04.call [new file with mode: 0644]
codea/skinner33_04.instr [new file with mode: 0644]
codea/skinner33_05.0 [new file with mode: 0644]
codea/skinner33_05.call [new file with mode: 0644]
codea/skinner33_05.instr [new file with mode: 0644]
codea/skinner33_06.0 [new file with mode: 0644]
codea/skinner33_06.call [new file with mode: 0644]
codea/skinner33_06.instr [new file with mode: 0644]
codea/skinner33_07.0 [new file with mode: 0644]
codea/skinner33_07.call [new file with mode: 0644]
codea/skinner33_07.instr [new file with mode: 0644]
codea/skinner33_08.0 [new file with mode: 0644]
codea/skinner33_08.call [new file with mode: 0644]
codea/skinner33_08.instr [new file with mode: 0644]
codea/skinner33_09.0 [new file with mode: 0644]
codea/skinner33_09.call [new file with mode: 0644]
codea/skinner33_09.instr [new file with mode: 0644]
codea/skinner33_10.0 [new file with mode: 0644]
codea/skinner33_10.call [new file with mode: 0644]
codea/skinner33_10.instr [new file with mode: 0644]
codea/skinner33_11.0 [new file with mode: 0644]
codea/skinner33_11.call [new file with mode: 0644]
codea/skinner33_11.instr [new file with mode: 0644]
codea/skinner33_12.0 [new file with mode: 0644]
codea/skinner33_12.call [new file with mode: 0644]
codea/skinner33_12.instr [new file with mode: 0644]
codea/skinner33_13.0 [new file with mode: 0644]
codea/skinner33_13.call [new file with mode: 0644]
codea/skinner33_13.instr [new file with mode: 0644]
codea/skinner33_14.0 [new file with mode: 0644]
codea/skinner33_14.call [new file with mode: 0644]
codea/skinner33_14.instr [new file with mode: 0644]

diff --git a/codea/skinner33_04.0 b/codea/skinner33_04.0
new file mode 100644 (file)
index 0000000..10b8940
--- /dev/null
@@ -0,0 +1,15 @@
+method f1(a b)
+       return a - (-3 * b);
+end;
+
+method f2(a b)
+       return a - (2 * b);
+end;
+
+method f3(a b)
+       return a - (5 * b);
+end;
+
+method  f(a b c d)
+        return a - (8 * (b - (-4 * (c - (-3 * d)))));
+end;
diff --git a/codea/skinner33_04.call b/codea/skinner33_04.call
new file mode 100644 (file)
index 0000000..d83320d
--- /dev/null
@@ -0,0 +1,50 @@
+#define F1(a,b)     ((long)(a) - (-3UL * (long)(b)))
+#define F2(a,b)     ((long)(a) - (2UL * (long)(b)))
+#define F3(a,b)     ((long)(a) - (5UL * (long)(b)))
+#define  F(a,b,c,d) ((long)(a) - (8UL * ((long)(b) - (-4UL * ((long)(c) - (-3UL * (long)(d)))))))
+
+/* based on mrstrcmp_13
+   in our language the lea opts are only possible for -1, -2, -4 and -8
+   this testcase tests other constants
+*/
+
+long f1(long, long, long);
+long f2(long, long, long);
+long f3(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) &&
+
+    f3(0,    3,  20) == F3(   3,  20) &&
+    f3(0, -100,  80) == F3(-100,  80) &&
+    f3(0,   50,  -9) == F3(  50,  -9) &&
+    f3(0,  -77, -50) == F3( -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) &&
+    f3(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F3(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f3(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F3(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL)
+   );
+
diff --git a/codea/skinner33_04.instr b/codea/skinner33_04.instr
new file mode 100644 (file)
index 0000000..3b20426
--- /dev/null
@@ -0,0 +1 @@
+108
diff --git a/codea/skinner33_05.0 b/codea/skinner33_05.0
new file mode 100644 (file)
index 0000000..e680181
--- /dev/null
@@ -0,0 +1,11 @@
+method f1(a b)
+       return (-3 * b) - a;
+end;
+
+method f2(a b)
+       return (2 * b) - a;
+end;
+
+method f3(a b)
+       return (5 * b) - a;
+end;
diff --git a/codea/skinner33_05.call b/codea/skinner33_05.call
new file mode 100644 (file)
index 0000000..5c88f7a
--- /dev/null
@@ -0,0 +1,43 @@
+#define F1(a,b)     ((-3UL * (long)(b)) - (long)(a))
+#define F2(a,b)     ((2UL * (long)(b)) - (long)(a))
+#define F3(a,b)     ((5UL * (long)(b)) - (long)(a))
+
+
+/* based on mrstrcmp_13
+   this testcase tests an other order of ops where no lea is possible
+*/
+
+long f1(long, long, long);
+long f2(long, long, long);
+long f3(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) &&
+
+    f3(0,    3,  20) == F3(   3,  20) &&
+    f3(0, -100,  80) == F3(-100,  80) &&
+    f3(0,   50,  -9) == F3(  50,  -9) &&
+    f3(0,  -77, -50) == F3( -77, -50) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f3(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F3(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f3(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F3(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL)
+   );
+
diff --git a/codea/skinner33_05.instr b/codea/skinner33_05.instr
new file mode 100644 (file)
index 0000000..fb1e7bc
--- /dev/null
@@ -0,0 +1 @@
+54
diff --git a/codea/skinner33_06.0 b/codea/skinner33_06.0
new file mode 100644 (file)
index 0000000..cc943e1
--- /dev/null
@@ -0,0 +1,15 @@
+method f1(a b)
+       return a - (b * -3);
+end;
+
+method f2(a b)
+       return a - (b * 2);
+end;
+
+method f3(a b)
+       return a - (b * 5);
+end;
+
+method  f(a b c d)
+        return a - ((b - ((c - (d * -3)) * -4)) * 8);
+end;
diff --git a/codea/skinner33_06.call b/codea/skinner33_06.call
new file mode 100644 (file)
index 0000000..7ea7701
--- /dev/null
@@ -0,0 +1,50 @@
+#define F1(a,b)     ((long)(a) - ((long)(b) * -3UL))
+#define F2(a,b)     ((long)(a) - ((long)(b) * 2UL))
+#define F3(a,b)     ((long)(a) - ((long)(b) * 5UL))
+#define  F(a,b,c,d) ((long)(a) - (8UL * ((long)(b) - (-4UL * ((long)(c) - (-3UL * (long)(d)))))))
+
+
+/* based on mrstrcmp_14
+   in our language the lea opts are only possible for -1, -2, -4 and -8
+   this testcase tests other constants and other op order in mul
+*/
+
+long f1(long, long, long);
+long f2(long, long, long);
+long f3(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) &&
+
+    f3(0,    3,  20) == F3(   3,  20) &&
+    f3(0, -100,  80) == F3(-100,  80) &&
+    f3(0,   50,  -9) == F3(  50,  -9) &&
+    f3(0,  -77, -50) == F3( -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) &&
+    f3(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F3(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f3(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F3(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) 
+   );
diff --git a/codea/skinner33_06.instr b/codea/skinner33_06.instr
new file mode 100644 (file)
index 0000000..3b20426
--- /dev/null
@@ -0,0 +1 @@
+108
diff --git a/codea/skinner33_07.0 b/codea/skinner33_07.0
new file mode 100644 (file)
index 0000000..3191ec2
--- /dev/null
@@ -0,0 +1,7 @@
+method f1(a b c)
+       return a - ((b - c) * -2);
+end;
+
+method f2(a b c)
+       return a - ((b - c) * -3);
+end;
diff --git a/codea/skinner33_07.call b/codea/skinner33_07.call
new file mode 100644 (file)
index 0000000..62902cc
--- /dev/null
@@ -0,0 +1,28 @@
+#define F1(a,b,c)     ((long)(a) -(((long)(b) - (long)(c)) * -2UL))
+#define F2(a,b,c)     ((long)(a) -(((long)(b) - (long)(c)) * -3UL))
+
+
+long f1(long, long, long, long);
+long f2(long, long, long, long);
+
+RET(f1(0,    3,  20, 15) == F1(   3,  20, 15) &&
+    f1(0, -100,  80, 23) == F1(-100,  80, 23) &&
+    f1(0,   50,  -9, -5) == F1(  50,  -9, -5) &&
+    f1(0,  -77, -50, 87) == F1( -77, -50, 87) &&
+
+       f2(0,    3,  20, 15) == F2(   3,  20, 15) &&
+    f2(0, -100,  80, 23) == F2(-100,  80, 23) &&
+    f2(0,   50,  -9, -5) == F2(  50,  -9, -5) &&
+    f2(0,  -77, -50, 87) == F2( -77, -50, 87) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL)
+   );
+
diff --git a/codea/skinner33_07.instr b/codea/skinner33_07.instr
new file mode 100644 (file)
index 0000000..69a893a
--- /dev/null
@@ -0,0 +1 @@
+66
diff --git a/codea/skinner33_08.0 b/codea/skinner33_08.0
new file mode 100644 (file)
index 0000000..55a4687
--- /dev/null
@@ -0,0 +1,7 @@
+method f1(a b c)
+       return a - (-2 * (b - c));
+end;
+
+method f2(a b c)
+       return a - (-3 * (b - c));
+end;
diff --git a/codea/skinner33_08.call b/codea/skinner33_08.call
new file mode 100644 (file)
index 0000000..2fbb006
--- /dev/null
@@ -0,0 +1,28 @@
+#define F1(a,b,c)     ((long)(a) -(-2UL * ((long)(b) - (long)(c))))
+#define F2(a,b,c)     ((long)(a) -(-3UL * ((long)(b) - (long)(c))))
+
+
+long f1(long, long, long, long);
+long f2(long, long, long, long);
+
+RET(f1(0,    3,  20, 15) == F1(   3,  20, 15) &&
+    f1(0, -100,  80, 23) == F1(-100,  80, 23) &&
+    f1(0,   50,  -9, -5) == F1(  50,  -9, -5) &&
+    f1(0,  -77, -50, 87) == F1( -77, -50, 87) &&
+
+       f2(0,    3,  20, 15) == F2(   3,  20, 15) &&
+    f2(0, -100,  80, 23) == F2(-100,  80, 23) &&
+    f2(0,   50,  -9, -5) == F2(  50,  -9, -5) &&
+    f2(0,  -77, -50, 87) == F2( -77, -50, 87) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL)
+   );
+
diff --git a/codea/skinner33_08.instr b/codea/skinner33_08.instr
new file mode 100644 (file)
index 0000000..69a893a
--- /dev/null
@@ -0,0 +1 @@
+66
diff --git a/codea/skinner33_09.0 b/codea/skinner33_09.0
new file mode 100644 (file)
index 0000000..ae8403d
--- /dev/null
@@ -0,0 +1,7 @@
+method f1(a b c)
+       return ((b - c) * -2) - a;
+end;
+
+method f2(a b c)
+       return ((b - c) * -3) - a;
+end;
diff --git a/codea/skinner33_09.call b/codea/skinner33_09.call
new file mode 100644 (file)
index 0000000..224059c
--- /dev/null
@@ -0,0 +1,28 @@
+#define F1(a,b,c)     ((((long)(b) - (long)(c)) * -2UL) - (long)(a))
+#define F2(a,b,c)     ((((long)(b) - (long)(c)) * -3UL) - (long)(a))
+
+
+long f1(long, long, long, long);
+long f2(long, long, long, long);
+
+RET(f1(0,    3,  20, 15) == F1(   3,  20, 15) &&
+    f1(0, -100,  80, 23) == F1(-100,  80, 23) &&
+    f1(0,   50,  -9, -5) == F1(  50,  -9, -5) &&
+    f1(0,  -77, -50, 87) == F1( -77, -50, 87) &&
+
+       f2(0,    3,  20, 15) == F2(   3,  20, 15) &&
+    f2(0, -100,  80, 23) == F2(-100,  80, 23) &&
+    f2(0,   50,  -9, -5) == F2(  50,  -9, -5) &&
+    f2(0,  -77, -50, 87) == F2( -77, -50, 87) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL)
+   );
+
diff --git a/codea/skinner33_09.instr b/codea/skinner33_09.instr
new file mode 100644 (file)
index 0000000..abdfb05
--- /dev/null
@@ -0,0 +1 @@
+60
diff --git a/codea/skinner33_10.0 b/codea/skinner33_10.0
new file mode 100644 (file)
index 0000000..6c08195
--- /dev/null
@@ -0,0 +1,7 @@
+method f1(a b c)
+       return (-2 * (b - c)) - a;
+end;
+
+method f2(a b c)
+       return (-3 * (b - c)) - a;
+end;
diff --git a/codea/skinner33_10.call b/codea/skinner33_10.call
new file mode 100644 (file)
index 0000000..a2eb7e9
--- /dev/null
@@ -0,0 +1,28 @@
+#define F1(a,b,c)     ((-2UL * ((long)(b) - (long)(c))) - (long)(a))
+#define F2(a,b,c)     ((-3UL * ((long)(b) - (long)(c))) - (long)(a))
+
+
+long f1(long, long, long, long);
+long f2(long, long, long, long);
+
+RET(f1(0,    3,  20, 15) == F1(   3,  20, 15) &&
+    f1(0, -100,  80, 23) == F1(-100,  80, 23) &&
+    f1(0,   50,  -9, -5) == F1(  50,  -9, -5) &&
+    f1(0,  -77, -50, 87) == F1( -77, -50, 87) &&
+
+       f2(0,    3,  20, 15) == F2(   3,  20, 15) &&
+    f2(0, -100,  80, 23) == F2(-100,  80, 23) &&
+    f2(0,   50,  -9, -5) == F2(  50,  -9, -5) &&
+    f2(0,  -77, -50, 87) == F2( -77, -50, 87) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL)
+   );
+
diff --git a/codea/skinner33_10.instr b/codea/skinner33_10.instr
new file mode 100644 (file)
index 0000000..abdfb05
--- /dev/null
@@ -0,0 +1 @@
+60
diff --git a/codea/skinner33_11.0 b/codea/skinner33_11.0
new file mode 100644 (file)
index 0000000..2aebf85
--- /dev/null
@@ -0,0 +1,7 @@
+method f1(a b)
+       return (a - b) - (-3 * b);
+end;
+
+method f2(a b)
+       return (a -b) - (-2 * b);
+end;
diff --git a/codea/skinner33_11.call b/codea/skinner33_11.call
new file mode 100644 (file)
index 0000000..3c9cdce
--- /dev/null
@@ -0,0 +1,27 @@
+#define F1(a,b)     (((long)(a) - (long)(b)) - (-3UL * (long)(b)))
+#define F2(a,b)     (((long)(a) - (long)(b)) - (-2UL * (long)(b)))
+
+long f1(long, long, long);
+long f2(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) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) 
+   );
+
diff --git a/codea/skinner33_11.instr b/codea/skinner33_11.instr
new file mode 100644 (file)
index 0000000..fb1e7bc
--- /dev/null
@@ -0,0 +1 @@
+54
diff --git a/codea/skinner33_12.0 b/codea/skinner33_12.0
new file mode 100644 (file)
index 0000000..1835cfe
--- /dev/null
@@ -0,0 +1,7 @@
+method f1(a b)
+       return (a - b) - (b * -3);
+end;
+
+method f2(a b)
+       return (a -b) - (b * -2);
+end;
diff --git a/codea/skinner33_12.call b/codea/skinner33_12.call
new file mode 100644 (file)
index 0000000..f18e5a2
--- /dev/null
@@ -0,0 +1,27 @@
+#define F1(a,b)     (((long)(a) - (long)(b)) - ((long)(b) * -3UL))
+#define F2(a,b)     (((long)(a) - (long)(b)) - ((long)(b)* -2UL))
+
+long f1(long, long, long);
+long f2(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) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) 
+   );
+
diff --git a/codea/skinner33_12.instr b/codea/skinner33_12.instr
new file mode 100644 (file)
index 0000000..fb1e7bc
--- /dev/null
@@ -0,0 +1 @@
+54
diff --git a/codea/skinner33_13.0 b/codea/skinner33_13.0
new file mode 100644 (file)
index 0000000..5cf8b8b
--- /dev/null
@@ -0,0 +1,7 @@
+method f1(a b)
+       return (a - b) - (-3 * (b - a));
+end;
+
+method f2(a b)
+       return (a - b) - (-2 * (b - a));
+end;
diff --git a/codea/skinner33_13.call b/codea/skinner33_13.call
new file mode 100644 (file)
index 0000000..77dace7
--- /dev/null
@@ -0,0 +1,27 @@
+#define F1(a,b)     (((long)(a) - (long)(b)) - (-3UL * ((long)(b) - (long)(a))))
+#define F2(a,b)     (((long)(a) - (long)(b)) - (-2UL  * ((long)(b) - (long)(a))))
+
+long f1(long, long, long);
+long f2(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) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) 
+   );
+
diff --git a/codea/skinner33_13.instr b/codea/skinner33_13.instr
new file mode 100644 (file)
index 0000000..8e14edc
--- /dev/null
@@ -0,0 +1 @@
+78
diff --git a/codea/skinner33_14.0 b/codea/skinner33_14.0
new file mode 100644 (file)
index 0000000..f03aab8
--- /dev/null
@@ -0,0 +1,7 @@
+method f1(a b)
+       return (a - b) - ((b - a) * -3);
+end;
+
+method f2(a b)
+       return (a - b) - ((b - a) * -2);
+end;
diff --git a/codea/skinner33_14.call b/codea/skinner33_14.call
new file mode 100644 (file)
index 0000000..714f7bd
--- /dev/null
@@ -0,0 +1,27 @@
+#define F1(a,b)     (((long)(a) - (long)(b)) - (((long)(b) -(long)(a))* -3UL))
+#define F2(a,b)     (((long)(a) - (long)(b)) - (((long)(b) -(long)(a))* -2UL))
+
+long f1(long, long, long);
+long f2(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) &&
+
+    f1(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F1(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) ==
+       F2(0x7FFFFFFFFFFFFFFFUL, 0x7FFFFFFFFFFFFFFFUL) &&
+
+    f1(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F1(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) &&
+    f2(0, 0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) ==
+       F2(0x8FFFFFFFFFFFFFFFUL, 0x8FFFFFFFFFFFFFFFUL) 
+   );
+
diff --git a/codea/skinner33_14.instr b/codea/skinner33_14.instr
new file mode 100644 (file)
index 0000000..8e14edc
--- /dev/null
@@ -0,0 +1 @@
+78