Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/GStreamer/orc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'orc/orcrules-neon.c')
-rw-r--r--orc/orcrules-neon.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/orc/orcrules-neon.c b/orc/orcrules-neon.c
index 726f0d4..a9c6bb0 100644
--- a/orc/orcrules-neon.c
+++ b/orc/orcrules-neon.c
@@ -1363,20 +1363,38 @@ neon_rule_loadX (OrcCompiler *compiler, void *user, OrcInstruction *insn)
if (src->vartype == ORC_VAR_TYPE_DEST) update = FALSE;
if (type == 1) {
- if (compiler->vars[insn->src_args[1]].vartype != ORC_VAR_TYPE_CONST) {
+ OrcVariable *src2 = compiler->vars + insn->src_args[1];
+
+ if (src2->vartype != ORC_VAR_TYPE_CONST) {
ORC_PROGRAM_ERROR(compiler,"unimplemented");
return;
}
ptr_register = compiler->gp_tmpreg;
if (compiler->is_64bit) {
+ if (src2->value.i < 0) {
+ orc_arm64_emit_sub_imm (compiler, 64, ptr_register,
+ src->ptr_register,
+ src2->value.i * src->size * -1);
+ }
+ else
+ {
orc_arm64_emit_add_imm (compiler, 64, ptr_register,
src->ptr_register,
- compiler->vars[insn->src_args[1]].value.i * src->size);
+ src2->value.i * src->size);
+ }
} else {
+ if (src2->value.i < 0) {
+ orc_arm_emit_sub_imm (compiler, ptr_register,
+ src->ptr_register,
+ src2->value.i * src->size * -1, TRUE);
+ }
+ else
+ {
orc_arm_emit_add_imm (compiler, ptr_register,
src->ptr_register,
- compiler->vars[insn->src_args[1]].value.i * src->size);
+ src2->value.i * src->size);
+ }
}
update = FALSE;