summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Emont <guijemont@igalia.com>2012-12-15 17:47:46 +0100
committerGuillaume Emont <guijemont@igalia.com>2012-12-28 15:23:39 +0100
commitde1b9411454f4caca8ec172a06e8315294471607 (patch)
tree5397ff03e176faa8de1c5d6fc121f0471af92858
parentefdc4d1b4be18f1cbe66eb5e8b0ef307fadb31c9 (diff)
mips: shrs, shra.ph: error if shift amount is not a const
-rw-r--r--orc/orcrules-mips.c18
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