summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Emont <guijemont@igalia.com>2012-12-07 14:05:44 +0100
committerGuillaume Emont <guijemont@igalia.com>2012-12-28 15:23:37 +0100
commitad9b6429f2b0085a23a239293e6b59c532f754f9 (patch)
tree7981fa90515cdd53950f0ef4e11faf4c891f5233
parent8677c94fe2aaa8c0187f4cdc910f1c024614d811 (diff)
downloadorc-ad9b6429f2b0085a23a239293e6b59c532f754f9.tar.gz
mips: implement swapl
-rw-r--r--orc/orcrules-mips.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/orc/orcrules-mips.c b/orc/orcrules-mips.c
index dd45429..e0a27a5 100644
--- a/orc/orcrules-mips.c
+++ b/orc/orcrules-mips.c
@@ -472,6 +472,16 @@ mips_rule_loadp (OrcCompiler *compiler, void *user, OrcInstruction *insn)
}
}
+void
+mips_rule_swapl (OrcCompiler *compiler, void *user, OrcInstruction *insn)
+{
+ int src = ORC_SRC_ARG (compiler, insn, 0);
+ int dest = ORC_DEST_ARG (compiler, insn, 0);
+
+ orc_mips_emit_wsbh (compiler, dest, src);
+ orc_mips_emit_packrl_ph (compiler, dest, dest, dest);
+}
+
void
orc_compiler_orc_mips_register_rules (OrcTarget *target)
@@ -509,4 +519,5 @@ orc_compiler_orc_mips_register_rules (OrcTarget *target)
orc_rule_register (rule_set, "loadupib", mips_rule_loadupib, NULL);
orc_rule_register (rule_set, "loadupdb", mips_rule_loadupdb, NULL);
orc_rule_register (rule_set, "shrsw", mips_rule_shrsw, NULL);
+ orc_rule_register (rule_set, "swapl", mips_rule_swapl, NULL);
}