summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2008-09-19 17:55:54 -0600
committerBrian Paul <[email protected]>2008-09-19 17:56:45 -0600
commit99cdfc997b9da10fee57cf1048a55354e1ee4244 (patch)
treed698fc4d594e54ac654e1456d9fb6638ea6ae456 /src/gallium
parentaca74a4d92ba6f99d756ab703a78efc3918b3840 (diff)
cell: use different opcodes for spe_move() depending on even/odd address
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/auxiliary/rtasm/rtasm_ppc_spe.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/rtasm/rtasm_ppc_spe.c b/src/gallium/auxiliary/rtasm/rtasm_ppc_spe.c
index 1c3e21b4c03..491141f1908 100644
--- a/src/gallium/auxiliary/rtasm/rtasm_ppc_spe.c
+++ b/src/gallium/auxiliary/rtasm/rtasm_ppc_spe.c
@@ -639,7 +639,13 @@ spe_complement(struct spe_function *p, unsigned rT, unsigned rA)
void
spe_move(struct spe_function *p, unsigned rT, unsigned rA)
{
- spe_ori(p, rT, rA, 0);
+ /* Use different instructions depending on the instruction address
+ * to take advantage of the dual pipelines.
+ */
+ if (p->num_inst & 1)
+ spe_shlqbyi(p, rT, rA, 0); /* odd pipe */
+ else
+ spe_ori(p, rT, rA, 0); /* even pipe */
}