compile test for neon
authorDavid Schleef <ds@schleef.org>
Tue, 31 Mar 2009 17:40:52 +0000 (10:40 -0700)
committerDavid Schleef <ds@schleef.org>
Tue, 26 May 2009 23:56:18 +0000 (16:56 -0700)
orc-test/orctest.c
orc-test/orctest.h

index 216bec5..e8b65a4 100644 (file)
@@ -127,6 +127,67 @@ orc_test_gcc_compile (OrcProgram *p)
 }
 
 
+#define PREFIX "/opt/arm-2008q3/bin/arm-none-linux-gnueabi-"
+
+int
+orc_test_gcc_compile_neon (OrcProgram *p)
+{
+  char cmd[200];
+  int ret;
+  FILE *file;
+
+  ret = orc_program_compile_for_target (p, orc_target_get_by_name("neon"));
+  if (!ret) {
+    return FALSE;
+  }
+
+  fflush (stdout);
+
+  file = fopen ("tmp.s", "w");
+  fprintf(file, "%s", orc_program_get_asm_code (p));
+  fclose (file);
+
+  file = fopen ("dump", "w");
+  ret = fwrite(p->code, p->code_size, 1, file);
+  fclose (file);
+
+  ret = system (PREFIX "gcc -mcpu=cortex-a8 -mfpu=neon -Wall -c tmp.s");
+  if (ret != 0) {
+    printf("gcc failed\n");
+    return FALSE;
+  }
+
+  ret = system (PREFIX "objdump -dr tmp.o >tmp.dis");
+  if (ret != 0) {
+    printf("objdump failed\n");
+    return FALSE;
+  }
+
+  sprintf (cmd, PREFIX "objcopy -I binary -O elf32-littlearm -B arm "
+      "--rename-section .data=.text "
+      "--redefine-sym _binary_dump_start=%s "
+      "dump tmp.o", p->name);
+  ret = system (cmd);
+  if (ret != 0) {
+    printf("objcopy failed\n");
+    return FALSE;
+  }
+
+  ret = system (PREFIX "objdump -Dr tmp.o >tmp-dump.dis");
+  if (ret != 0) {
+    printf("objdump failed\n");
+    return FALSE;
+  }
+
+  ret = system ("diff -u tmp.dis tmp-dump.dis");
+  if (ret != 0) {
+    printf("diff failed\n");
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
 void
 orc_test_random_bits (void *data, int n_bytes)
 {
index 7b82606..0aaf2d3 100644 (file)
@@ -15,6 +15,7 @@ typedef enum {
 
 void orc_test_init (void);
 OrcTestResult orc_test_gcc_compile (OrcProgram *p);
+OrcTestResult orc_test_gcc_compile_neon (OrcProgram *p);
 void orc_test_random_bits (void *data, int n_bytes);
 OrcTestResult orc_test_compare_output (OrcProgram *program);