summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Emont <guijemont@igalia.com>2012-12-21 14:06:15 +0100
committerGuillaume Emont <guijemont@igalia.com>2012-12-28 15:23:39 +0100
commit6aa95c89f4d9c84d76fae5ae9ee71775ec16bd90 (patch)
tree9b98421741a2f45a779ea14d968c1530fa66accc
parent85bbf8a0ee93f4d529fd2fc5a163f6195253ccf8 (diff)
mips: loadb: with shift 1, use lh if aligned
-rw-r--r--orc/orcrules-mips.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/orc/orcrules-mips.c b/orc/orcrules-mips.c
index f64b207..cb3b2e6 100644
--- a/orc/orcrules-mips.c
+++ b/orc/orcrules-mips.c
@@ -60,9 +60,13 @@ mips_rule_load (OrcCompiler *compiler, void *user, OrcInstruction *insn)
orc_mips_emit_lbu (compiler, dest, src, offset);
break;
case 1:
- orc_mips_emit_lbu (compiler, ORC_MIPS_T3, src, offset);
- orc_mips_emit_lbu (compiler, dest, src, offset+1);
- orc_mips_emit_append (compiler, dest, ORC_MIPS_T3, 8);
+ if (is_aligned) {
+ orc_mips_emit_lh (compiler, dest, src, offset);
+ } else {
+ orc_mips_emit_lbu (compiler, ORC_MIPS_T3, src, offset);
+ orc_mips_emit_lbu (compiler, dest, src, offset+1);
+ orc_mips_emit_append (compiler, dest, ORC_MIPS_T3, 8);
+ }
break;
case 2:
if (is_aligned) {