From d2e6e9877dce24a743ae93f05235574cccca7ca2 Mon Sep 17 00:00:00 2001 From: David Schleef Date: Tue, 7 Jul 2009 21:22:29 -0700 Subject: [PATCH] neon: add rule for mulhuw --- orc/orcrules-neon.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/orc/orcrules-neon.c b/orc/orcrules-neon.c index d1e6163..b1feec5 100644 --- a/orc/orcrules-neon.c +++ b/orc/orcrules-neon.c @@ -1271,6 +1271,24 @@ orc_neon_rule_signw (OrcCompiler *p, void *user, OrcInstruction *insn) p->vars[insn->dest_args[0]].alloc); } +static void +orc_neon_rule_mulhuw (OrcCompiler *p, void *user, OrcInstruction *insn) +{ + unsigned int code; + + orc_neon_emit_binary_long (p, "vmull.u16",0xf3900c00, + p->tmpreg, + p->vars[insn->src_args[0]].alloc, + p->vars[insn->src_args[1]].alloc); + ORC_ASM_CODE(p," vshrn.i32 %s, %s, #%d\n", + orc_neon_reg_name (p->vars[insn->dest_args[0]].alloc), + orc_neon_reg_name_quad (p->tmpreg), 16); + code = NEON_BINARY (0xf2900810, + p->vars[insn->dest_args[0]].alloc, + p->tmpreg, 0); + orc_arm_emit (p, code); +} + void orc_compiler_neon_register_rules (OrcTarget *target) { @@ -1322,6 +1340,7 @@ orc_compiler_neon_register_rules (OrcTarget *target) REG(minsw); REG(minuw); REG(mullw); + REG(mulhuw); REG(orw); //REG(shlw); //REG(shrsw); -- 2.7.4