diff options
author | Guillaume Emont <guijemont@igalia.com> | 2012-12-11 14:47:13 +0100 |
---|---|---|
committer | Guillaume Emont <guijemont@igalia.com> | 2012-12-28 15:23:38 +0100 |
commit | 56d5b2680ed0384afa8c7578359a00c05c1cfbf1 (patch) | |
tree | 7b9f0f0c9f0116026fe8ea4db0b3e44b3b6842a4 /orc | |
parent | 5581d995ea3e572a9448518c3a42ed5acd55bc5b (diff) |
mips: loadp: load as quad bytes or paired halfword for values of (resp) 1 or 2 bytes
Diffstat (limited to 'orc')
-rw-r--r-- | orc/orcrules-mips.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/orc/orcrules-mips.c b/orc/orcrules-mips.c index 909b1ba..02f7498 100644 --- a/orc/orcrules-mips.c +++ b/orc/orcrules-mips.c @@ -456,6 +456,10 @@ mips_rule_loadp (OrcCompiler *compiler, void *user, OrcInstruction *insn) if (src->vartype == ORC_VAR_TYPE_CONST) { if (size == 1 || size == 2) { orc_mips_emit_ori (compiler, dest->alloc, ORC_MIPS_ZERO, src->value.i); + if (size == 1) + orc_mips_emit_replv_qb (compiler, dest->alloc, dest->alloc); + else if (size == 2) + orc_mips_emit_replv_ph (compiler, dest->alloc, dest->alloc); } else if (size == 4) { orc_int16 high_bits; high_bits = ((src->value.i >> 16) & 0xffff); @@ -472,9 +476,11 @@ mips_rule_loadp (OrcCompiler *compiler, void *user, OrcInstruction *insn) if (size == 1) { orc_mips_emit_lb (compiler, dest->alloc, compiler->exec_reg, ORC_MIPS_EXECUTOR_OFFSET_PARAMS(insn->src_args[0])); + orc_mips_emit_replv_qb (compiler, dest->alloc, dest->alloc); } else if (size == 2) { orc_mips_emit_lh (compiler, dest->alloc, compiler->exec_reg, ORC_MIPS_EXECUTOR_OFFSET_PARAMS(insn->src_args[0])); + orc_mips_emit_replv_ph (compiler, dest->alloc, dest->alloc); } else if (size == 4) { orc_mips_emit_lw (compiler, dest->alloc, compiler->exec_reg, ORC_MIPS_EXECUTOR_OFFSET_PARAMS(insn->src_args[0])); |