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:
authorDavid Schleef <ds@schleef.org>2011-10-03 05:56:50 +0400
committerDavid Schleef <ds@schleef.org>2011-10-03 05:57:15 +0400
commitee163ec79b8c8d83e2d182e579f5e6b570beff71 (patch)
treed9c210acdb3a4d2f10a654283309c2d4c7bd402f
parent5cda9c082a1b468657f52399c00d41b3ec362b42 (diff)
sse: Fix mov of pointer values
Fixes Fedora bug #742534.
-rw-r--r--orc/orcrules-mmx.c8
-rw-r--r--orc/orcrules-sse.c8
-rw-r--r--orc/orcx86.c2
-rw-r--r--orc/orcx86.h2
-rw-r--r--orc/orcx86insn.c17
5 files changed, 28 insertions, 9 deletions
diff --git a/orc/orcrules-mmx.c b/orc/orcrules-mmx.c
index 651dc53..4875410 100644
--- a/orc/orcrules-mmx.c
+++ b/orc/orcrules-mmx.c
@@ -1565,8 +1565,8 @@ mmx_rule_mulhsl_slow (OrcCompiler *p, void *user, OrcInstruction *insn)
orc_x86_emit_mov_memoffset_mmx (p, 16, offset, p->exec_reg,
p->vars[insn->dest_args[0]].alloc, FALSE);
- orc_x86_emit_mov_memoffset_reg (p, 8, offset + 32, p->exec_reg, X86_EAX);
- orc_x86_emit_mov_memoffset_reg (p, 8, offset + 40, p->exec_reg, X86_EDX);
+ orc_x86_emit_mov_memoffset_reg (p, regsize, offset + 32, p->exec_reg, X86_EAX);
+ orc_x86_emit_mov_memoffset_reg (p, regsize, offset + 40, p->exec_reg, X86_EDX);
}
#endif
@@ -1629,8 +1629,8 @@ mmx_rule_mulslq_slow (OrcCompiler *p, void *user, OrcInstruction *insn)
orc_x86_emit_mov_memoffset_mmx (p, 16, offset + 16, p->exec_reg,
p->vars[insn->dest_args[0]].alloc, FALSE);
- orc_x86_emit_mov_memoffset_reg (p, 8, offset + 32, p->exec_reg, X86_EAX);
- orc_x86_emit_mov_memoffset_reg (p, 8, offset + 40, p->exec_reg, X86_EDX);
+ orc_x86_emit_mov_memoffset_reg (p, regsize, offset + 32, p->exec_reg, X86_EAX);
+ orc_x86_emit_mov_memoffset_reg (p, regsize, offset + 40, p->exec_reg, X86_EDX);
}
#endif
diff --git a/orc/orcrules-sse.c b/orc/orcrules-sse.c
index c0f76b8..260a4f9 100644
--- a/orc/orcrules-sse.c
+++ b/orc/orcrules-sse.c
@@ -1565,8 +1565,8 @@ sse_rule_mulhsl_slow (OrcCompiler *p, void *user, OrcInstruction *insn)
orc_x86_emit_mov_memoffset_sse (p, 16, offset, p->exec_reg,
p->vars[insn->dest_args[0]].alloc, FALSE);
- orc_x86_emit_mov_memoffset_reg (p, 8, offset + 32, p->exec_reg, X86_EAX);
- orc_x86_emit_mov_memoffset_reg (p, 8, offset + 40, p->exec_reg, X86_EDX);
+ orc_x86_emit_mov_memoffset_reg (p, regsize, offset + 32, p->exec_reg, X86_EAX);
+ orc_x86_emit_mov_memoffset_reg (p, regsize, offset + 40, p->exec_reg, X86_EDX);
}
#endif
@@ -1629,8 +1629,8 @@ sse_rule_mulslq_slow (OrcCompiler *p, void *user, OrcInstruction *insn)
orc_x86_emit_mov_memoffset_sse (p, 16, offset + 16, p->exec_reg,
p->vars[insn->dest_args[0]].alloc, FALSE);
- orc_x86_emit_mov_memoffset_reg (p, 8, offset + 32, p->exec_reg, X86_EAX);
- orc_x86_emit_mov_memoffset_reg (p, 8, offset + 40, p->exec_reg, X86_EDX);
+ orc_x86_emit_mov_memoffset_reg (p, regsize, offset + 32, p->exec_reg, X86_EAX);
+ orc_x86_emit_mov_memoffset_reg (p, regsize, offset + 40, p->exec_reg, X86_EDX);
}
#endif
diff --git a/orc/orcx86.c b/orc/orcx86.c
index da8fb40..c3a22f1 100644
--- a/orc/orcx86.c
+++ b/orc/orcx86.c
@@ -297,7 +297,7 @@ orc_x86_emit_mov_reg_memoffset (OrcCompiler *compiler, int size, int reg1, int o
reg1, offset, reg2);
break;
case 8:
- orc_x86_emit_cpuinsn_reg_memoffset (compiler, ORC_X86_mov_r_rm,
+ orc_x86_emit_cpuinsn_reg_memoffset_8 (compiler, ORC_X86_mov_r_rm,
reg1, offset, reg2);
break;
default:
diff --git a/orc/orcx86.h b/orc/orcx86.h
index 6a85bce..4716d46 100644
--- a/orc/orcx86.h
+++ b/orc/orcx86.h
@@ -176,6 +176,8 @@ void orc_x86_emit_cpuinsn_imm_memoffset (OrcCompiler *p, int index, int size,
int imm, int offset, int dest);
void orc_x86_emit_cpuinsn_reg_memoffset (OrcCompiler *p, int index, int src,
int offset, int dest);
+void orc_x86_emit_cpuinsn_reg_memoffset_8 (OrcCompiler *p, int index, int src,
+ int offset, int dest);
void orc_x86_emit_cpuinsn_memoffset_reg (OrcCompiler *p, int index, int size,
int offset, int src, int dest);
void orc_x86_emit_cpuinsn_memoffset (OrcCompiler *p, int index, int size,
diff --git a/orc/orcx86insn.c b/orc/orcx86insn.c
index d8b885d..659ebc5 100644
--- a/orc/orcx86insn.c
+++ b/orc/orcx86insn.c
@@ -1039,6 +1039,23 @@ orc_x86_emit_cpuinsn_reg_memoffset (OrcCompiler *p, int index, int src,
}
void
+orc_x86_emit_cpuinsn_reg_memoffset_8 (OrcCompiler *p, int index, int src,
+ int offset, int dest)
+{
+ OrcX86Insn *xinsn = orc_x86_get_output_insn (p);
+ const OrcSysOpcode *opcode = orc_x86_opcodes + index;
+ int size = 8;
+
+ xinsn->opcode_index = index;
+ xinsn->opcode = opcode;
+ xinsn->src = src;
+ xinsn->dest = dest;
+ xinsn->type = ORC_X86_RM_MEMOFFSET;
+ xinsn->offset = offset;
+ xinsn->size = size;
+}
+
+void
orc_x86_emit_cpuinsn_memoffset_reg (OrcCompiler *p, int index, int size,
int offset, int src, int dest)
{