From 32df626c9e4bb843ea46888ebce63f6809696dd1 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Fri, 26 Jun 2009 11:15:58 -0700 Subject: [PATCH] neon: test --- orc/orcprogram-neon.c | 25 +++++++++++++++++++++++++ orc/orcprogram.c | 26 ++++++++++++++++++++++++++ orc/orcprogram.h | 1 + 3 files changed, 52 insertions(+) diff --git a/orc/orcprogram-neon.c b/orc/orcprogram-neon.c index 34c6a90..aeb4843 100644 --- a/orc/orcprogram-neon.c +++ b/orc/orcprogram-neon.c @@ -188,6 +188,31 @@ orc_compiler_neon_init (OrcCompiler *compiler) compiler->loop_shift = loop_shift; } + switch (orc_program_get_max_accumulator_size (compiler->program)) { + case 0: + loop_shift = 4; + break; + case 1: + loop_shift = 3; + break; + case 2: + loop_shift = 2; + break; + case 4: + loop_shift = 1; + break; + case 8: + loop_shift = 0; + break; + default: + ORC_ERROR("unhandled max var size %d", + orc_program_get_max_var_size (compiler->program)); + break; + } + if (loop_shift < compiler->loop_shift) { + compiler->loop_shift = loop_shift; + } + compiler->need_mask_regs = TRUE; } diff --git a/orc/orcprogram.c b/orc/orcprogram.c index a469903..f109c0e 100644 --- a/orc/orcprogram.c +++ b/orc/orcprogram.c @@ -561,3 +561,29 @@ orc_program_get_max_array_size (OrcProgram *program) return max; } +/** + * orc_program_get_max_accumulator_size: + * @program: a pointer to an OrcProgram structure + * + * Returns the size of the largest array used in the program. + * + * Returns: the number of bytes + */ +int +orc_program_get_max_accumulator_size (OrcProgram *program) +{ + int i; + int max; + + max = 0; + for(i=0;ivars[i].size) { + if (program->vars[i].vartype == ORC_VAR_TYPE_ACCUMULATOR) { + max = MAX(max, program->vars[i].size); + } + } + } + + return max; +} + diff --git a/orc/orcprogram.h b/orc/orcprogram.h index b395e64..5932f5d 100644 --- a/orc/orcprogram.h +++ b/orc/orcprogram.h @@ -496,6 +496,7 @@ void orc_target_register (OrcTarget *target); OrcTarget *orc_target_get_by_name (const char *target_name); int orc_program_get_max_var_size (OrcProgram *program); int orc_program_get_max_array_size (OrcProgram *program); +int orc_program_get_max_accumulator_size (OrcProgram *program); #endif -- 2.7.4