summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/cell/spu
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2009-02-16 08:25:33 -0700
committerBrian Paul <brianp@vmware.com>2009-02-16 08:33:03 -0700
commitc51938afe1626bfccfe38fe2f508bf90e58ca74c (patch)
treecf24d911448da721dbd4f975c3c4116659bab970 /src/gallium/drivers/cell/spu
parentffbe28d25d755bc51d9f865ac176a110f6f8f5e0 (diff)
cell: use some SPU intrinsics to get slightly better code in eval_inputs()
Suggested by Jonathan Adamczewski. There may be more places to do this...
Diffstat (limited to 'src/gallium/drivers/cell/spu')
-rw-r--r--src/gallium/drivers/cell/spu/spu_tri.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/gallium/drivers/cell/spu/spu_tri.c b/src/gallium/drivers/cell/spu/spu_tri.c
index 04e4584b25..d727268475 100644
--- a/src/gallium/drivers/cell/spu/spu_tri.c
+++ b/src/gallium/drivers/cell/spu/spu_tri.c
@@ -219,10 +219,13 @@ eval_inputs(float x, float y, vector float *fragZ, vector float fragInputs[])
/* linear term */
vector float dadx = setup.coef[attr].dadx;
vector float dady = setup.coef[attr].dady;
- r0 += fragX * splatx(dadx) + fragY * splatx(dady);
- r1 += fragX * splaty(dadx) + fragY * splaty(dady);
- r2 += fragX * splatz(dadx) + fragY * splatz(dady);
- r3 += fragX * splatw(dadx) + fragY * splatw(dady);
+ /* Use SPU intrinsics here to get slightly better code.
+ * originally: r0 += fragX * splatx(dadx) + fragY * splatx(dady);
+ */
+ r0 = spu_madd(fragX, splatx(dadx), spu_madd(fragY, splatx(dady), r0));
+ r1 = spu_madd(fragX, splaty(dadx), spu_madd(fragY, splaty(dady), r1));
+ r2 = spu_madd(fragX, splatz(dadx), spu_madd(fragY, splatz(dady), r2));
+ r3 = spu_madd(fragX, splatw(dadx), spu_madd(fragY, splatw(dady), r3));
if (interp == INTERP_PERSPECTIVE) {
/* perspective term */
r0 *= wInv;