}
+#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)
{
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);