From ad9b6429f2b0085a23a239293e6b59c532f754f9 Mon Sep 17 00:00:00 2001 From: Guillaume Emont Date: Fri, 7 Dec 2012 14:05:44 +0100 Subject: mips: implement swapl --- orc/orcrules-mips.c | 11 +++++++++++ 1 file changed, 11 insertions(+) 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); } -- cgit v1.2.1