static void
orc_neon_rule_mergebw (OrcCompiler *p, void *user, OrcInstruction *insn)
{
+ OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
+
if (p->insn_shift <= 2) {
if (p->vars[insn->dest_args[0]].alloc != p->vars[insn->src_args[0]].alloc) {
orc_neon_emit_mov (p, p->vars[insn->dest_args[0]],
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) {
- OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
orc_neon_emit_mov (p, tmpreg, p->vars[insn->src_args[1]]);
orc_neon_emit_unary (p, "vzip.8", 0xf3b20180,
p->vars[insn->dest_args[0]].alloc,
p->vars[insn->src_args[0]]);
}
- OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
orc_neon_emit_mov_quad (p, tmpreg, p->vars[insn->src_args[1]]);
orc_neon_emit_unary_quad (p, "vzip.8", 0xf3b20180,
p->vars[insn->dest_args[0]].alloc,
static void
orc_neon_rule_mergewl (OrcCompiler *p, void *user, OrcInstruction *insn)
{
+ OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
+
if (p->insn_shift <= 1) {
if (p->vars[insn->dest_args[0]].alloc != p->vars[insn->src_args[0]].alloc) {
orc_neon_emit_mov (p, p->vars[insn->dest_args[0]],
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) {
- OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
orc_neon_emit_mov (p, tmpreg, p->vars[insn->src_args[1]]);
orc_neon_emit_unary (p, "vzip.16", 0xf3b60180,
p->vars[insn->dest_args[0]].alloc,
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) {
- OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
orc_neon_emit_mov_quad (p, tmpreg, p->vars[insn->src_args[1]]);
orc_neon_emit_unary_quad (p, "vzip.16", 0xf3b60180,
p->vars[insn->dest_args[0]].alloc,
static void
orc_neon_rule_mergelq (OrcCompiler *p, void *user, OrcInstruction *insn)
{
+ OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
+
if (p->insn_shift <= 0) {
if (p->vars[insn->dest_args[0]].alloc != p->vars[insn->src_args[0]].alloc) {
orc_neon_emit_mov (p, p->vars[insn->dest_args[0]],
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) {
- OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
orc_neon_emit_mov (p, tmpreg, p->vars[insn->src_args[1]]);
orc_neon_emit_unary (p, "vtrn.32", 0xf3ba0080,
p->vars[insn->dest_args[0]].alloc,
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) {
- OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->src_args[1]].size };
orc_neon_emit_mov_quad (p, tmpreg, p->vars[insn->src_args[1]]);
orc_neon_emit_unary_quad (p, "vzip.32", 0xf3ba0180,
p->vars[insn->dest_args[0]].alloc,
static void
orc_neon_rule_splatbw (OrcCompiler *p, void *user, OrcInstruction *insn)
{
+ OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->dest_args[0]].size };
+
if (p->insn_shift <= 2) {
if (p->vars[insn->dest_args[0]].alloc != p->vars[insn->src_args[0]].alloc) {
orc_neon_emit_mov (p, p->vars[insn->dest_args[0]],
p->vars[insn->src_args[0]]);
}
- OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->dest_args[0]].size };
orc_neon_emit_mov (p, tmpreg, p->vars[insn->dest_args[0]]);
orc_neon_emit_unary (p, "vzip.8", 0xf3b20180,
p->vars[insn->dest_args[0]].alloc,
p->vars[insn->src_args[0]]);
}
- OrcVariable tmpreg = { .alloc = p->tmpreg, .size = p->vars[insn->dest_args[0]].size };
orc_neon_emit_mov_quad (p, tmpreg, p->vars[insn->dest_args[0]]);
orc_neon_emit_unary_quad (p, "vzip.8", 0xf3b20180,
p->vars[insn->dest_args[0]].alloc,