arm: codeb cases added arm
authorBernhard Urban <lewurm@gmail.com>
Wed, 30 Mar 2011 01:58:10 +0000 (01:58 +0000)
committerBernhard Urban <lewurm@gmail.com>
Wed, 30 Mar 2011 01:58:10 +0000 (01:58 +0000)
30 files changed:
gesamt_arm/codeb_abgabe_ba.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_ba.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_ba.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bb.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bb.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bb.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bc.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bc.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bc.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bd.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bd.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bd.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_be.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_be.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_be.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bf.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bf.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bf.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bg.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bg.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bg.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bh.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bh.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bh.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bi.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bi.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bi.instr [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bj.0 [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bj.call [new file with mode: 0644]
gesamt_arm/codeb_abgabe_bj.instr [new file with mode: 0644]

diff --git a/gesamt_arm/codeb_abgabe_ba.0 b/gesamt_arm/codeb_abgabe_ba.0
new file mode 100644 (file)
index 0000000..de7d90c
--- /dev/null
@@ -0,0 +1,4 @@
+method m(x)
+  x := this-x;
+  return x*2;
+end;
diff --git a/gesamt_arm/codeb_abgabe_ba.call b/gesamt_arm/codeb_abgabe_ba.call
new file mode 100644 (file)
index 0000000..e3f3c99
--- /dev/null
@@ -0,0 +1,5 @@
+extern long m(long,long);
+int r1 = m(7,4);
+int r2 = m(18,22);
+printf("r1: %d\nr2: %d\n", r1, r2);
+RET(r1==6 && r2==-8);
diff --git a/gesamt_arm/codeb_abgabe_ba.instr b/gesamt_arm/codeb_abgabe_ba.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/gesamt_arm/codeb_abgabe_bb.0 b/gesamt_arm/codeb_abgabe_bb.0
new file mode 100644 (file)
index 0000000..27ee1de
--- /dev/null
@@ -0,0 +1,4 @@
+method m()
+  var that:=3*this;
+  return this or that;
+end;
diff --git a/gesamt_arm/codeb_abgabe_bb.call b/gesamt_arm/codeb_abgabe_bb.call
new file mode 100644 (file)
index 0000000..24d9f34
--- /dev/null
@@ -0,0 +1,2 @@
+extern long m(long);
+RET(m(7)==23 && m(13)==47);
diff --git a/gesamt_arm/codeb_abgabe_bb.instr b/gesamt_arm/codeb_abgabe_bb.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/gesamt_arm/codeb_abgabe_bc.0 b/gesamt_arm/codeb_abgabe_bc.0
new file mode 100644 (file)
index 0000000..6b69b2e
--- /dev/null
@@ -0,0 +1,7 @@
+method mymax(that)
+  if this<that then
+    return that;
+  else
+    return this;
+  end;
+end;
diff --git a/gesamt_arm/codeb_abgabe_bc.call b/gesamt_arm/codeb_abgabe_bc.call
new file mode 100644 (file)
index 0000000..f4e86b1
--- /dev/null
@@ -0,0 +1,2 @@
+extern long mymax(long,long);
+RET(mymax(7,4)==7 && mymax(18,22)==22);
diff --git a/gesamt_arm/codeb_abgabe_bc.instr b/gesamt_arm/codeb_abgabe_bc.instr
new file mode 100644 (file)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/gesamt_arm/codeb_abgabe_bd.0 b/gesamt_arm/codeb_abgabe_bd.0
new file mode 100644 (file)
index 0000000..3d086a9
--- /dev/null
@@ -0,0 +1,6 @@
+method mymax(that)
+  if not (this<that) then
+    that:=this;
+  end;
+  return that;
+end;
diff --git a/gesamt_arm/codeb_abgabe_bd.call b/gesamt_arm/codeb_abgabe_bd.call
new file mode 100644 (file)
index 0000000..f4e86b1
--- /dev/null
@@ -0,0 +1,2 @@
+extern long mymax(long,long);
+RET(mymax(7,4)==7 && mymax(18,22)==22);
diff --git a/gesamt_arm/codeb_abgabe_bd.instr b/gesamt_arm/codeb_abgabe_bd.instr
new file mode 100644 (file)
index 0000000..ec63514
--- /dev/null
@@ -0,0 +1 @@
+9
diff --git a/gesamt_arm/codeb_abgabe_be.0 b/gesamt_arm/codeb_abgabe_be.0
new file mode 100644 (file)
index 0000000..a2e2e61
--- /dev/null
@@ -0,0 +1,12 @@
+method fib()
+  var n:=0;
+  var a:=0;
+  var b:=1;
+  while n<this do
+    n:=n--1;
+    var t:=a-(0-b);
+    a:=b;
+    b:=t;
+  end;
+  return a;
+end;
diff --git a/gesamt_arm/codeb_abgabe_be.call b/gesamt_arm/codeb_abgabe_be.call
new file mode 100644 (file)
index 0000000..aaf92c7
--- /dev/null
@@ -0,0 +1,2 @@
+extern long fib(long);
+RET(3==fib(4));
diff --git a/gesamt_arm/codeb_abgabe_be.instr b/gesamt_arm/codeb_abgabe_be.instr
new file mode 100644 (file)
index 0000000..8f92bfd
--- /dev/null
@@ -0,0 +1 @@
+35
diff --git a/gesamt_arm/codeb_abgabe_bf.0 b/gesamt_arm/codeb_abgabe_bf.0
new file mode 100644 (file)
index 0000000..2c56204
--- /dev/null
@@ -0,0 +1,11 @@
+method ggt(b)
+  var a:=this;
+  while b do
+    if b<a then
+      a:=a-b;
+    else
+      b:=b-a;
+    end;
+  end;
+  return a;
+end;
diff --git a/gesamt_arm/codeb_abgabe_bf.call b/gesamt_arm/codeb_abgabe_bf.call
new file mode 100644 (file)
index 0000000..72a0cac
--- /dev/null
@@ -0,0 +1,2 @@
+extern long ggt(long, long);
+RET (6==ggt(42,108));
diff --git a/gesamt_arm/codeb_abgabe_bf.instr b/gesamt_arm/codeb_abgabe_bf.instr
new file mode 100644 (file)
index 0000000..95f9650
--- /dev/null
@@ -0,0 +1 @@
+49
diff --git a/gesamt_arm/codeb_abgabe_bg.0 b/gesamt_arm/codeb_abgabe_bg.0
new file mode 100644 (file)
index 0000000..21e3b7b
--- /dev/null
@@ -0,0 +1,11 @@
+struct next end;
+
+method length()
+  var l:=this;
+  var len:=0;
+  while l do
+    l:=l.next;
+    len:=len--1;
+  end;
+  return len;
+end;
diff --git a/gesamt_arm/codeb_abgabe_bg.call b/gesamt_arm/codeb_abgabe_bg.call
new file mode 100644 (file)
index 0000000..41d2795
--- /dev/null
@@ -0,0 +1,9 @@
+typedef struct list {struct list *next; } list;
+
+extern long length(list *);
+list a={NULL};
+list b={&a};
+list c={&b};
+list d={&c};
+list e={&a};
+RET(2==length(&e) && 4==length(&d));
diff --git a/gesamt_arm/codeb_abgabe_bg.instr b/gesamt_arm/codeb_abgabe_bg.instr
new file mode 100644 (file)
index 0000000..7facc89
--- /dev/null
@@ -0,0 +1 @@
+36
diff --git a/gesamt_arm/codeb_abgabe_bh.0 b/gesamt_arm/codeb_abgabe_bh.0
new file mode 100644 (file)
index 0000000..635e6ad
--- /dev/null
@@ -0,0 +1,9 @@
+struct next val end;
+
+
+method insert(val list)
+/* usage: list:=node.insert(5,list) */
+  this.val := val;
+  next := list;
+  return this;
+end;
diff --git a/gesamt_arm/codeb_abgabe_bh.call b/gesamt_arm/codeb_abgabe_bh.call
new file mode 100644 (file)
index 0000000..5b44d8b
--- /dev/null
@@ -0,0 +1,6 @@
+typedef struct list {struct list *next; long val;} list;
+list *insert(list *, long, list *);
+list a={NULL,7};
+list b={NULL,2};
+RET((&a)==insert(&a, 3, &b) && 
+     a.next==&b && a.val==3 && b.next==NULL && b.val==2);
diff --git a/gesamt_arm/codeb_abgabe_bh.instr b/gesamt_arm/codeb_abgabe_bh.instr
new file mode 100644 (file)
index 0000000..b8626c4
--- /dev/null
@@ -0,0 +1 @@
+4
diff --git a/gesamt_arm/codeb_abgabe_bi.0 b/gesamt_arm/codeb_abgabe_bi.0
new file mode 100644 (file)
index 0000000..d7e17d8
--- /dev/null
@@ -0,0 +1,17 @@
+struct a b c end;
+
+method m(flag)
+  a:=b-1;
+  if flag then
+    b:=c-1;
+    var a:=95;
+    c:=a-1;
+  else
+    a:=a-10;
+    var b:=a*2;
+    b:=23;
+    c:=b*2;
+  end;
+  b:=b-17;
+  return this;
+end;
diff --git a/gesamt_arm/codeb_abgabe_bi.call b/gesamt_arm/codeb_abgabe_bi.call
new file mode 100644 (file)
index 0000000..6c129e1
--- /dev/null
@@ -0,0 +1,9 @@
+typedef struct foo {long a; long b; long c;} foo;
+extern foo *m(foo *, long);
+foo s1={29,37,41};
+foo s2={6,28,216};
+
+RET((&s1)==m(&s1,25) && (&s2)==m(&s2,0) &&
+    s1.a==36 && s1.b==23 && s1.c==94 &&
+    s2.a==17 && s2.b==11 && s2.c==46);
+
diff --git a/gesamt_arm/codeb_abgabe_bi.instr b/gesamt_arm/codeb_abgabe_bi.instr
new file mode 100644 (file)
index 0000000..64bb6b7
--- /dev/null
@@ -0,0 +1 @@
+30
diff --git a/gesamt_arm/codeb_abgabe_bj.0 b/gesamt_arm/codeb_abgabe_bj.0
new file mode 100644 (file)
index 0000000..427e7de
--- /dev/null
@@ -0,0 +1,10 @@
+struct elem end;
+
+method vadd(v n)
+  while 0<n do
+    n:=n-1;
+    (this-(-4*n)).elem := (this-(n*-4)).elem - (0-(v-(n*-4)).elem);
+  end;
+  return this;
+end;
+
diff --git a/gesamt_arm/codeb_abgabe_bj.call b/gesamt_arm/codeb_abgabe_bj.call
new file mode 100644 (file)
index 0000000..2dd64d2
--- /dev/null
@@ -0,0 +1,14 @@
+extern long *vadd(long *, long *, long);
+long a[]={7,11,13};
+long b[]={23,42,5};
+int i;
+for(i=0; i<3; i++) {
+       printf("a[%i]: %d, b[%i]: %d\n", i, a[i], i, b[i]);
+}
+int ret = vadd(a,b,2)==a;
+for(i=0; i<3; i++) {
+       printf("a[%i]: %d, b[%i]: %d\n", i, a[i], i, b[i]);
+}
+RET(ret &&
+    a[0]==30 && a[1]==53 && a[2]==13 &&
+    b[0]==23 && b[1]==42 && b[2]==5);
diff --git a/gesamt_arm/codeb_abgabe_bj.instr b/gesamt_arm/codeb_abgabe_bj.instr
new file mode 100644 (file)
index 0000000..2bd5a0a
--- /dev/null
@@ -0,0 +1 @@
+22