From: David Schleef Date: Wed, 8 Jul 2009 03:44:14 +0000 (-0700) Subject: neon: add signw rule X-Git-Tag: orc-0.4.5~22^2~40 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a0f6579d759da470a266738eda627cfdde7bc88d;p=platform%2Fupstream%2Forc.git neon: add signw rule --- diff --git a/orc/orcrules-neon.c b/orc/orcrules-neon.c index 389f366..d1e6163 100644 --- a/orc/orcrules-neon.c +++ b/orc/orcrules-neon.c @@ -1031,6 +1031,7 @@ orc_neon_rule_andn (OrcCompiler *p, void *user, OrcInstruction *insn) } + UNARY(absb,"vabs.s8",0xf3b10300, 3) BINARY(addb,"vadd.i8",0xf2000800, 3) BINARY(addssb,"vqadd.s8",0xf2000010, 3) @@ -1253,6 +1254,23 @@ orc_neon_rule_accsadubl (OrcCompiler *p, void *user, OrcInstruction *insn) p->tmpreg); } +static void +orc_neon_rule_signw (OrcCompiler *p, void *user, OrcInstruction *insn) +{ + /* slow */ + + orc_neon_emit_loadiw (p, p->tmpreg, 1); + orc_neon_emit_binary (p, "vmin.s16", 0xf2100610, + p->vars[insn->dest_args[0]].alloc, + p->tmpreg, + p->vars[insn->src_args[0]].alloc); + orc_neon_emit_loadiw (p, p->tmpreg, -1); + orc_neon_emit_binary (p, "vmax.s16", 0xf2100600, + p->vars[insn->dest_args[0]].alloc, + p->tmpreg, + p->vars[insn->dest_args[0]].alloc); +} + void orc_compiler_neon_register_rules (OrcTarget *target) { @@ -1308,6 +1326,7 @@ orc_compiler_neon_register_rules (OrcTarget *target) //REG(shlw); //REG(shrsw); //REG(shruw); + REG(signw); REG(subw); REG(subssw); REG(subusw);