qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [5216] alpha: add tests
@ 2008-09-14 17:18 Aurelien Jarno
  0 siblings, 0 replies; only message in thread
From: Aurelien Jarno @ 2008-09-14 17:18 UTC (permalink / raw)
  To: qemu-devel

Revision: 5216
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5216
Author:   aurel32
Date:     2008-09-14 17:18:29 +0000 (Sun, 14 Sep 2008)

Log Message:
-----------
alpha: add tests

This patch creates tests/alpha directory and adds an "hello world"
program as well as two tests.

Signed-off-by: Tristan Gingold <gingold@adacore.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

Added Paths:
-----------
    trunk/tests/alpha/
    trunk/tests/alpha/Makefile
    trunk/tests/alpha/crt.s
    trunk/tests/alpha/hello-alpha.c
    trunk/tests/alpha/test-cond.c

Added: trunk/tests/alpha/Makefile
===================================================================
--- trunk/tests/alpha/Makefile	                        (rev 0)
+++ trunk/tests/alpha/Makefile	2008-09-14 17:18:29 UTC (rev 5216)
@@ -0,0 +1,29 @@
+CROSS=alpha-linux-gnu-
+CC=$(CROSS)gcc
+AS=$(CROSS)as
+
+SIM=../../alpha-linux-user/qemu-alpha
+
+CFLAGS=-O
+LINK=$(CC) -v -o $@ crt.o $< -nostdlib
+
+TESTS=test-cond test-cmov
+
+all: hello-alpha $(TESTS)
+
+hello-alpha: hello-alpha.o crt.o
+	$(LINK)
+
+test-cond: test-cond.o crt.o
+	$(LINK)
+
+test-cmov.o: test-cond.c
+	$(CC) -c $(CFLAGS) -DTEST_CMOV -o $@ $<
+
+test-cmov: test-cmov.o crt.o
+	$(LINK)
+
+clean:
+	$(RM) *.o *~ hello-alpha $(TESTS)
+
+.PHONY: clean all

Added: trunk/tests/alpha/crt.s
===================================================================
--- trunk/tests/alpha/crt.s	                        (rev 0)
+++ trunk/tests/alpha/crt.s	2008-09-14 17:18:29 UTC (rev 5216)
@@ -0,0 +1,23 @@
+	.text
+
+	.globl _start
+	.ent _start,0
+_start:
+	.frame $15,0,$15
+	br $29,1f
+1:	ldgp $29, 0($29)
+	.prologue 0
+	ldq $27,main($29) !literal!1
+	jsr $26,($27)
+
+	lda $0,1
+	callsys
+
+	call_pal 0
+	.end _start
+
+	.globl write
+write:
+	lda $0,4
+	callsys
+	ret

Added: trunk/tests/alpha/hello-alpha.c
===================================================================
--- trunk/tests/alpha/hello-alpha.c	                        (rev 0)
+++ trunk/tests/alpha/hello-alpha.c	2008-09-14 17:18:29 UTC (rev 5216)
@@ -0,0 +1,5 @@
+int main (void)
+{
+  write (1, "hello\n", 6);
+  return 0;
+}

Added: trunk/tests/alpha/test-cond.c
===================================================================
--- trunk/tests/alpha/test-cond.c	                        (rev 0)
+++ trunk/tests/alpha/test-cond.c	2008-09-14 17:18:29 UTC (rev 5216)
@@ -0,0 +1,87 @@
+
+#ifdef TEST_CMOV
+
+#define TEST_COND(N) 				\
+int test_##N (long a)				\
+{						\
+  int res = 1;					\
+						\
+  asm ("cmov"#N" %1,$31,%0"			\
+       : "+r" (res) : "r" (a));			\
+  return !res;					\
+}
+
+#else
+
+#define TEST_COND(N) 				\
+int test_##N (long a)				\
+{						\
+  int res = 1;					\
+						\
+  asm ("b"#N" %1,1f\n\t"			\
+       "addq $31,$31,%0\n\t"			\
+       "1: unop\n"				\
+       : "+r" (res) : "r" (a));			\
+  return res;					\
+}
+
+#endif
+
+TEST_COND(eq)
+TEST_COND(ne)
+TEST_COND(ge)
+TEST_COND(gt)
+TEST_COND(lbc)
+TEST_COND(lbs)
+TEST_COND(le)
+TEST_COND(lt)
+
+static struct {
+  int (*func)(long);
+  long v;
+  int r;
+} vectors[] =
+  {
+    {test_eq, 0, 1},
+    {test_eq, 1, 0},
+
+    {test_ne, 0, 0},
+    {test_ne, 1, 1},
+
+    {test_ge, 0, 1},
+    {test_ge, 1, 1},
+    {test_ge, -1, 0},
+
+    {test_gt, 0, 0},
+    {test_gt, 1, 1},
+    {test_gt, -1, 0},
+
+    {test_lbc, 0, 1},
+    {test_lbc, 1, 0},
+    {test_lbc, -1, 0},
+
+    {test_lbs, 0, 0},
+    {test_lbs, 1, 1},
+    {test_lbs, -1, 1},
+
+    {test_le, 0, 1},
+    {test_le, 1, 0},
+    {test_le, -1, 1},
+
+    {test_lt, 0, 0},
+    {test_lt, 1, 0},
+    {test_lt, -1, 1},
+  };
+
+int main (void)
+{
+  int i;
+
+  for (i = 0; i < sizeof (vectors)/sizeof(vectors[0]); i++)
+    if ((*vectors[i].func)(vectors[i].v) != vectors[i].r) {
+      write(1, "Failed\n", 7);
+      return 1;
+    }
+  write(1, "OK\n", 3);
+  return 0;
+}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-09-14 17:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-14 17:18 [Qemu-devel] [5216] alpha: add tests Aurelien Jarno

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).