summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2010-07-06 19:06:37 -0700
committerDavid Schleef <ds@schleef.org>2010-07-09 16:57:18 -0700
commit4678b7d0c9f28bc665ba696066be75286c3c6461 (patch)
tree0ea11d8f0555921cd20e20774361d2fce0b8c640
parent9a04679bb6c05c887db5c491e06572c7f4b22ed7 (diff)
downloadorc-4678b7d0c9f28bc665ba696066be75286c3c6461.tar.gz
arm/neon: use subs for loop counter
-rw-r--r--orc/orcarm.c5
-rw-r--r--orc/orcarm.h2
-rw-r--r--orc/orcprogram-arm.c3
-rw-r--r--orc/orcprogram-neon.c14
4 files changed, 10 insertions, 14 deletions
diff --git a/orc/orcarm.c b/orc/orcarm.c
index a3eae37..cec205f 100644
--- a/orc/orcarm.c
+++ b/orc/orcarm.c
@@ -361,9 +361,10 @@ orc_arm_emit_sub (OrcCompiler *compiler, int dest, int src1, int src2)
}
void
-orc_arm_emit_sub_imm (OrcCompiler *compiler, int dest, int src1, int value)
+orc_arm_emit_sub_imm (OrcCompiler *compiler, int dest, int src1, int value,
+ int record)
{
- orc_arm_emit_sub_i (compiler, ORC_ARM_COND_AL, 0, dest, src1, value);
+ orc_arm_emit_sub_i (compiler, ORC_ARM_COND_AL, record, dest, src1, value);
}
void
diff --git a/orc/orcarm.h b/orc/orcarm.h
index f776dea..5af8c0a 100644
--- a/orc/orcarm.h
+++ b/orc/orcarm.h
@@ -80,7 +80,7 @@ void orc_arm_emit_add (OrcCompiler *compiler, int dest, int src1, int src2);
void orc_arm_emit_sub (OrcCompiler *compiler, int dest, int src1, int src2);
void orc_arm_emit_add_imm (OrcCompiler *compiler, int dest, int src1, int value);
void orc_arm_emit_and_imm (OrcCompiler *compiler, int dest, int src1, int value);
-void orc_arm_emit_sub_imm (OrcCompiler *compiler, int dest, int src1, int value);
+void orc_arm_emit_sub_imm (OrcCompiler *compiler, int dest, int src1, int value, int record);
void orc_arm_emit_asr_imm (OrcCompiler *compiler, int dest, int src1, int value);
void orc_arm_emit_lsl_imm (OrcCompiler *compiler, int dest, int src1, int value);
void orc_arm_emit_cmp_imm (OrcCompiler *compiler, int src1, int value);
diff --git a/orc/orcprogram-arm.c b/orc/orcprogram-arm.c
index 16c0ab8..6518a54 100644
--- a/orc/orcprogram-arm.c
+++ b/orc/orcprogram-arm.c
@@ -317,10 +317,9 @@ orc_compiler_orc_arm_assemble (OrcCompiler *compiler)
orc_arm_emit_load_reg (compiler, ORC_ARM_A3, compiler->exec_reg,
(int)ORC_STRUCT_OFFSET(OrcExecutor, params[ORC_VAR_A2]));
- orc_arm_emit_sub_imm (compiler, ORC_ARM_A3, ORC_ARM_A3, 1);
+ orc_arm_emit_sub_imm (compiler, ORC_ARM_A3, ORC_ARM_A3, 1, TRUE);
orc_arm_emit_store_reg (compiler, ORC_ARM_A3, compiler->exec_reg,
(int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A2]));
- orc_arm_emit_cmp_imm (compiler, ORC_ARM_A3, 0);
orc_arm_emit_branch (compiler, ORC_ARM_COND_NE, 8);
}
diff --git a/orc/orcprogram-neon.c b/orc/orcprogram-neon.c
index 4cb12d5..2cc4b55 100644
--- a/orc/orcprogram-neon.c
+++ b/orc/orcprogram-neon.c
@@ -447,7 +447,7 @@ orc_neon_restore_unalignment (OrcCompiler *compiler)
orc_arm_emit_add (compiler, var->ptr_register, var->ptr_register,
var->ptr_offset);
orc_arm_emit_sub_imm (compiler, var->ptr_register, var->ptr_register,
- size);
+ size, FALSE);
}
break;
case ORC_VAR_TYPE_DEST:
@@ -657,8 +657,7 @@ orc_compiler_neon_assemble (OrcCompiler *compiler)
orc_arm_emit_label (compiler, 0);
orc_neon_emit_loop (compiler);
- orc_arm_emit_sub_imm (compiler, ORC_ARM_IP, ORC_ARM_IP, 1);
- orc_arm_emit_cmp_imm (compiler, ORC_ARM_IP, 0);
+ orc_arm_emit_sub_imm (compiler, ORC_ARM_IP, ORC_ARM_IP, 1, TRUE);
orc_arm_emit_branch (compiler, ORC_ARM_COND_NE, 0);
orc_arm_emit_label (compiler, 1);
@@ -684,11 +683,10 @@ orc_compiler_neon_assemble (OrcCompiler *compiler)
}
orc_arm_emit_label (compiler, 2);
- orc_arm_emit_sub_imm (compiler, ORC_ARM_IP, ORC_ARM_IP, 1);
+ orc_arm_emit_sub_imm (compiler, ORC_ARM_IP, ORC_ARM_IP, 1, TRUE);
for(i=0;i<(1<<compiler->unroll_shift);i++){
orc_neon_emit_loop (compiler);
}
- orc_arm_emit_cmp_imm (compiler, ORC_ARM_IP, 0);
orc_arm_emit_branch (compiler, ORC_ARM_COND_NE, 2);
if (0) {
@@ -713,8 +711,7 @@ orc_compiler_neon_assemble (OrcCompiler *compiler)
orc_arm_emit_label (compiler, 4);
orc_neon_emit_loop (compiler);
- orc_arm_emit_sub_imm (compiler, ORC_ARM_IP, ORC_ARM_IP, 1);
- orc_arm_emit_cmp_imm (compiler, ORC_ARM_IP, 0);
+ orc_arm_emit_sub_imm (compiler, ORC_ARM_IP, ORC_ARM_IP, 1, TRUE);
orc_arm_emit_branch (compiler, ORC_ARM_COND_NE, 4);
orc_arm_emit_label (compiler, 5);
@@ -726,10 +723,9 @@ orc_compiler_neon_assemble (OrcCompiler *compiler)
orc_arm_emit_load_reg (compiler, ORC_ARM_A3, compiler->exec_reg,
(int)ORC_STRUCT_OFFSET(OrcExecutor, params[ORC_VAR_A2]));
- orc_arm_emit_sub_imm (compiler, ORC_ARM_A3, ORC_ARM_A3, 1);
+ orc_arm_emit_sub_imm (compiler, ORC_ARM_A3, ORC_ARM_A3, 1, TRUE);
orc_arm_emit_store_reg (compiler, ORC_ARM_A3, compiler->exec_reg,
(int)ORC_STRUCT_OFFSET(OrcExecutor,params[ORC_VAR_A2]));
- orc_arm_emit_cmp_imm (compiler, ORC_ARM_A3, 0);
orc_arm_emit_branch (compiler, ORC_ARM_COND_NE, 8);
}