p->vars[insn->src_args[0]].alloc);
}
- if (p->vars[insn->src_args[1]].last_use != p->insn_index) {
+ if (p->vars[insn->src_args[1]].last_use != p->insn_index ||
+ p->vars[insn->src_args[1]].alloc == p->vars[insn->dest_args[0]].alloc) {
orc_neon_emit_mov (p, p->tmpreg, p->vars[insn->src_args[1]].alloc);
orc_neon_emit_unary (p, "vzip.8", 0xf3b20180,
p->vars[insn->dest_args[0]].alloc,
p->vars[insn->src_args[0]].alloc);
}
- if (p->vars[insn->src_args[1]].last_use != p->insn_index) {
+ if (p->vars[insn->src_args[1]].last_use != p->insn_index ||
+ p->vars[insn->src_args[1]].alloc == p->vars[insn->dest_args[0]].alloc) {
orc_neon_emit_mov (p, p->tmpreg, p->vars[insn->src_args[1]].alloc);
orc_neon_emit_unary (p, "vzip.16", 0xf3b60180,
p->vars[insn->dest_args[0]].alloc,
p->vars[insn->src_args[0]].alloc);
}
- if (p->vars[insn->src_args[1]].last_use != p->insn_index) {
+ if (p->vars[insn->src_args[1]].last_use != p->insn_index ||
+ p->vars[insn->src_args[1]].alloc == p->vars[insn->dest_args[0]].alloc) {
orc_neon_emit_mov_quad (p, p->tmpreg, p->vars[insn->src_args[1]].alloc);
orc_neon_emit_unary_quad (p, "vzip.16", 0xf3b60180,
p->vars[insn->dest_args[0]].alloc,
p->vars[insn->src_args[0]].alloc);
}
- if (p->vars[insn->src_args[1]].last_use != p->insn_index) {
+ if (p->vars[insn->src_args[1]].last_use != p->insn_index ||
+ p->vars[insn->src_args[1]].alloc == p->vars[insn->dest_args[0]].alloc) {
orc_neon_emit_mov (p, p->tmpreg, p->vars[insn->src_args[1]].alloc);
orc_neon_emit_unary (p, "vtrn.32", 0xf3ba0080,
p->vars[insn->dest_args[0]].alloc,
p->vars[insn->src_args[0]].alloc);
}
- if (p->vars[insn->src_args[1]].last_use != p->insn_index) {
+ if (p->vars[insn->src_args[1]].last_use != p->insn_index ||
+ p->vars[insn->src_args[1]].alloc == p->vars[insn->dest_args[0]].alloc) {
orc_neon_emit_mov_quad (p, p->tmpreg, p->vars[insn->src_args[1]].alloc);
orc_neon_emit_unary_quad (p, "vzip.32", 0xf3ba0180,
p->vars[insn->dest_args[0]].alloc,