Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/GStreamer/orc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2020-06-28 00:36:22 +0300
committerMarek Vasut <marex@denx.de>2020-09-19 04:08:46 +0300
commit65b23ee39a29fc52c715383951efb6e89db709e4 (patch)
treeb38b4be15007a2d85dbd210112b9c408f5851aa2
parent02effd2ab2f892b433736c4bad269b34d84c2889 (diff)
aarch64: Implement andn instruction
Fill in aarch64 opcode for andn instruction. This is bic instruction with reversed operands. Signed-off-by: Marek Vasut <marex@denx.de>
-rw-r--r--orc/orcrules-neon.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/orc/orcrules-neon.c b/orc/orcrules-neon.c
index 8c373ad..6aa7bf3 100644
--- a/orc/orcrules-neon.c
+++ b/orc/orcrules-neon.c
@@ -2434,17 +2434,25 @@ orc_neon_rule_andn (OrcCompiler *p, void *user, OrcInstruction *insn)
{
int max_shift = ORC_PTR_TO_INT(user);
- /* this is special because the operand order is reversed */
- if (p->insn_shift <= max_shift) { \
- orc_neon_emit_binary (p, "vbic", 0xf2100110,
- p->vars[insn->dest_args[0]].alloc,
- p->vars[insn->src_args[1]].alloc,
- p->vars[insn->src_args[0]].alloc);
+ if (p->is_64bit) {
+ orc_neon64_emit_binary (p, "bic", 0x0e601c00,
+ p->vars[insn->dest_args[0]],
+ p->vars[insn->src_args[1]],
+ p->vars[insn->src_args[0]],
+ p->insn_shift - (p->insn_shift > max_shift));
} else {
- orc_neon_emit_binary_quad (p, "vbic", 0xf2100110,
- p->vars[insn->dest_args[0]].alloc,
- p->vars[insn->src_args[1]].alloc,
- p->vars[insn->src_args[0]].alloc);
+ /* this is special because the operand order is reversed */
+ if (p->insn_shift <= max_shift) {
+ orc_neon_emit_binary (p, "vbic", 0xf2100110,
+ p->vars[insn->dest_args[0]].alloc,
+ p->vars[insn->src_args[1]].alloc,
+ p->vars[insn->src_args[0]].alloc);
+ } else {
+ orc_neon_emit_binary_quad (p, "vbic", 0xf2100110,
+ p->vars[insn->dest_args[0]].alloc,
+ p->vars[insn->src_args[1]].alloc,
+ p->vars[insn->src_args[0]].alloc);
+ }
}
}