summaryrefslogtreecommitdiff
path: root/orc/orcprogram-mips.c
diff options
context:
space:
mode:
Diffstat (limited to 'orc/orcprogram-mips.c')
-rw-r--r--orc/orcprogram-mips.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/orc/orcprogram-mips.c b/orc/orcprogram-mips.c
index f5d8cb9..88d5245 100644
--- a/orc/orcprogram-mips.c
+++ b/orc/orcprogram-mips.c
@@ -297,14 +297,24 @@ orc_mips_emit_loop (OrcCompiler *compiler)
}
for (j=0; j<ORC_N_COMPILER_VARIABLES; j++) {
- if (compiler->vars[j].name == NULL) continue;
- if (compiler->vars[j].vartype == ORC_VAR_TYPE_SRC ||
- compiler->vars[j].vartype == ORC_VAR_TYPE_DEST) {
- if (compiler->vars[j].ptr_register) {
+ OrcVariable *var = compiler->vars + j;
+
+ if (var->name == NULL) continue;
+ if (var->vartype == ORC_VAR_TYPE_SRC ||
+ var->vartype == ORC_VAR_TYPE_DEST) {
+ int offset;
+ if (var->update_type == 0) {
+ offset = 0;
+ } else if (var->update_type == 1) {
+ offset = (var->size << compiler->loop_shift) >> 1;
+ } else {
+ offset = var->size << compiler->loop_shift;
+ }
+ if (offset !=0 && var->ptr_register) {
orc_mips_emit_addiu (compiler,
- compiler->vars[j].ptr_register,
- compiler->vars[j].ptr_register,
- compiler->vars[j].size << compiler->loop_shift);
+ var->ptr_register,
+ var->ptr_register,
+ offset);
}
}
}