diff options
author | Guillaume Emont <guijemont@igalia.com> | 2012-12-15 17:47:46 +0100 |
---|---|---|
committer | Guillaume Emont <guijemont@igalia.com> | 2012-12-28 15:23:39 +0100 |
commit | de1b9411454f4caca8ec172a06e8315294471607 (patch) | |
tree | 5397ff03e176faa8de1c5d6fc121f0471af92858 | |
parent | efdc4d1b4be18f1cbe66eb5e8b0ef307fadb31c9 (diff) |
mips: shrs, shra.ph: error if shift amount is not a const
-rw-r--r-- | orc/orcrules-mips.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/orc/orcrules-mips.c b/orc/orcrules-mips.c index a776a5c..465c261 100644 --- a/orc/orcrules-mips.c +++ b/orc/orcrules-mips.c @@ -215,11 +215,14 @@ mips_rule_mullw (OrcCompiler *compiler, void *user, OrcInstruction *insn) void mips_rule_shrs (OrcCompiler *compiler, void *user, OrcInstruction *insn) { - int src = ORC_SRC_ARG (compiler, insn, 0); - int shift = ORC_SRC_VAL (compiler, insn, 1); + int src1 = ORC_SRC_ARG (compiler, insn, 0); + OrcVariable *src2 = compiler->vars + insn->src_args[1]; int dest = ORC_DEST_ARG (compiler, insn, 0); - - orc_mips_emit_sra (compiler, dest, src, shift); + if (src2->vartype == ORC_VAR_TYPE_CONST) { + orc_mips_emit_sra (compiler, dest, src1, src2->value.i); + } else { + ORC_COMPILER_ERROR(compiler, "rule only implemented for constants"); + } } void @@ -360,8 +363,11 @@ mips_rule_shrsw (OrcCompiler *compiler, void *user, OrcInstruction *insn) int src1 = ORC_SRC_ARG (compiler, insn, 0); OrcVariable *src2 = compiler->vars + insn->src_args[1]; int dest = ORC_DEST_ARG (compiler, insn, 0); - - orc_mips_emit_shra_ph (compiler, dest, src1, src2->value.i); + if (src2->vartype == ORC_VAR_TYPE_CONST) { + orc_mips_emit_shra_ph (compiler, dest, src1, src2->value.i); + } else { + ORC_COMPILER_ERROR(compiler, "rule only implemented for constants"); + } } void |