From 58722dfdcba1a7791b86ee99bd12a228d6d87ab0 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Tue, 31 Mar 2009 10:40:52 -0700 Subject: [PATCH] compile test for neon --- orc-test/orctest.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ orc-test/orctest.h | 1 + 2 files changed, 62 insertions(+) diff --git a/orc-test/orctest.c b/orc-test/orctest.c index 216bec5..e8b65a4 100644 --- a/orc-test/orctest.c +++ b/orc-test/orctest.c @@ -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) { diff --git a/orc-test/orctest.h b/orc-test/orctest.h index 7b82606..0aaf2d3 100644 --- a/orc-test/orctest.h +++ b/orc-test/orctest.h @@ -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); -- 2.7.4