From a48d8b36d7740e59c6fa4166cdfbf9be669b3a2e Mon Sep 17 00:00:00 2001 From: David Schleef Date: Mon, 15 Jun 2009 21:39:27 -0700 Subject: [PATCH] neon: Fix bug in copy[bwl] rule --- orc/orcrules-neon.c | 9 ++--- testsuite/Makefile.am | 6 ++- testsuite/compile_parse_neon.c | 90 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 testsuite/compile_parse_neon.c diff --git a/orc/orcrules-neon.c b/orc/orcrules-neon.c index db675f2..6f308ad 100644 --- a/orc/orcrules-neon.c +++ b/orc/orcrules-neon.c @@ -713,12 +713,9 @@ orc_neon_rule_ ## opcode (OrcCompiler *p, void *user, OrcInstruction *insn) \ ORC_ASM_CODE(p," " insn_name " %s, %s\n", \ orc_neon_reg_name (p->vars[insn->dest_args[0]].alloc), \ orc_neon_reg_name (p->vars[insn->src_args[0]].alloc)); \ - x |= (p->vars[insn->dest_args[0]].alloc&0xf)<<16; \ - x |= ((p->vars[insn->dest_args[0]].alloc>>4)&0x1)<<7; \ - x |= (p->vars[insn->src_args[0]].alloc&0xf)<<12; \ - x |= ((p->vars[insn->src_args[0]].alloc>>4)&0x1)<<22; \ - x |= (p->vars[insn->src_args[0]].alloc&0xf)<<0; \ - x |= ((p->vars[insn->src_args[0]].alloc>>4)&0x1)<<5; \ + x = NEON_BINARY(code, p->vars[insn->dest_args[0]].alloc, \ + p->vars[insn->src_args[0]].alloc, \ + p->vars[insn->src_args[0]].alloc); \ orc_arm_emit (p, x); \ } \ } diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am index 051ca05..686af20 100644 --- a/testsuite/Makefile.am +++ b/testsuite/Makefile.am @@ -21,11 +21,13 @@ CLEANFILES = temp-orc-test-* TESTS += compile_opcodes_sys_neon \ compile_opcodes_float_neon \ compile_opcodes_pixel_neon \ - compile_opcodes_sys_c64x + compile_opcodes_sys_c64x \ + compile_parse_neon orcbin_PROGRAMS += compile_opcodes_sys_neon \ compile_opcodes_float_neon \ compile_opcodes_pixel_neon \ - compile_opcodes_sys_c64x + compile_opcodes_sys_c64x \ + compile_parse_neon AM_CFLAGS = $(ORC_CFLAGS) LIBS = $(ORC_LIBS) $(top_builddir)/orc-test/liborc-test-@ORC_MAJORMINOR@.la diff --git a/testsuite/compile_parse_neon.c b/testsuite/compile_parse_neon.c new file mode 100644 index 0000000..548d7ac --- /dev/null +++ b/testsuite/compile_parse_neon.c @@ -0,0 +1,90 @@ + +#include +#include +#include + +#include +#include + +static char * read_file (const char *filename); +void output_code (OrcProgram *p, FILE *output); +void output_code_header (OrcProgram *p, FILE *output); +void output_code_test (OrcProgram *p, FILE *output); + +int error = FALSE; + +int +main (int argc, char *argv[]) +{ + char *code; + int n; + int i; + OrcProgram **programs; + const char *filename = "test.orc"; + + orc_init (); + orc_test_init (); + + if (argc >= 2) { + filename = argv[1]; + } + code = read_file (filename); + if (!code) { + printf("compile_parse_test \n"); + exit(1); + } + + n = orc_parse (code, &programs); + + for(i=0;i