mips: fixed prefetching instruction calculation, but deactivated prefetching for...
authorGuillaume Emont <guijemont@igalia.com>
Fri, 21 Dec 2012 13:04:56 +0000 (14:04 +0100)
committerGuillaume Emont <guijemont@igalia.com>
Fri, 28 Dec 2012 14:23:39 +0000 (15:23 +0100)
orc/orcprogram-mips.c

index b1a5498..17a482c 100644 (file)
@@ -323,21 +323,21 @@ orc_mips_emit_var_pref (OrcCompiler *compiler, int iter_offset, int total_shift)
     OrcVariable *var = compiler->vars + i;
 
     if (var->name == NULL) continue;
+    if (var->update_type == 0) {
+      offset = 0;
+    } else if (var->update_type == 1) {
+      offset = (var->size << total_shift) >> 1;
+    } else {
+      offset = var->size << total_shift;
+    }
     if (var->vartype == ORC_VAR_TYPE_SRC) {
-      if (var->update_type == 0) {
-        offset = 0;
-      } else if (var->update_type == 1) {
-        offset = (var->size << total_shift) >> 1;
-      } else {
-        offset = var->size << total_shift;
-      }
       for (j = iter_offset*offset; j < (iter_offset+1)*offset; j+=CACHE_LINE_SIZE)
         orc_mips_emit_pref (compiler, 4 /* load-streamed */,
-                            var->ptr_register, iter_offset * offset + j*CACHE_LINE_SIZE);
+                            var->ptr_register, j);
     } else if (var->vartype == ORC_VAR_TYPE_DEST) {
       for (j = iter_offset*offset; j < (iter_offset+1)*offset; j+=CACHE_LINE_SIZE)
       orc_mips_emit_pref (compiler, 5 /* store-streamed */,
-                          var->ptr_register, iter_offset * offset + j*CACHE_LINE_SIZE);
+                          var->ptr_register, j);
     }
   }
 }
@@ -360,8 +360,6 @@ orc_mips_emit_loop (OrcCompiler *compiler, int unroll)
   if (unroll)
     iteration_per_loop = 1 << compiler->unroll_shift;
 
-  orc_mips_emit_var_pref (compiler, 1, total_shift);
-
   for (j=0; j<iteration_per_loop; j++) {
     compiler->unroll_index = j;
     for (i=0; i<compiler->n_insns; i++) {
@@ -478,7 +476,6 @@ orc_mips_emit_full_loop (OrcCompiler *compiler, OrcMipsRegister counter,
   compiler->loop_shift = loop_shift;
   saved_alignment = orc_mips_get_alignment (compiler);
   orc_mips_set_alignment (compiler, alignment);
-  orc_mips_emit_var_pref (compiler, 0, compiler->loop_shift + unroll * compiler->unroll_shift);
   orc_mips_emit_loop (compiler, unroll);
   orc_mips_set_alignment (compiler, saved_alignment);
   compiler->loop_shift = saved_loop_shift;