mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-15 00:10:25 +01:00
draw: shortcircuit shuffle in aos_sse when possible
This commit is contained in:
parent
7b25c1a403
commit
6780a6dede
1 changed files with 13 additions and 5 deletions
|
|
@ -809,7 +809,9 @@ static boolean emit_DP3( struct aos_compilation *cp, const struct tgsi_full_inst
|
|||
sse_addss(cp->func, dst, tmp); /* a*x+c*z, b*y, ?, ? */
|
||||
emit_pshufd(cp, tmp, dst, SHUF(Y,X,W,Z));
|
||||
sse_addss(cp->func, dst, tmp);
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
|
||||
if (op->FullDstRegisters[0].DstRegister.WriteMask != 0x1)
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
|
||||
aos_release_xmm_reg(cp, tmp.idx);
|
||||
store_dest(cp, &op->FullDstRegisters[0], dst);
|
||||
|
|
@ -833,7 +835,9 @@ static boolean emit_DP4( struct aos_compilation *cp, const struct tgsi_full_inst
|
|||
sse_addps(cp->func, dst, tmp); /* a*x+c*z, b*y+d*w, a*x+c*z, b*y+d*w */
|
||||
emit_pshufd(cp, tmp, dst, SHUF(Y,X,W,Z));
|
||||
sse_addss(cp->func, dst, tmp);
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
|
||||
if (op->FullDstRegisters[0].DstRegister.WriteMask != 0x1)
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
|
||||
aos_release_xmm_reg(cp, tmp.idx);
|
||||
store_dest(cp, &op->FullDstRegisters[0], dst);
|
||||
|
|
@ -857,7 +861,9 @@ static boolean emit_DPH( struct aos_compilation *cp, const struct tgsi_full_inst
|
|||
sse_addss(cp->func, dst, tmp);
|
||||
emit_pshufd(cp, tmp, arg1, SHUF(W,W,W,W));
|
||||
sse_addss(cp->func, dst, tmp);
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
|
||||
if (op->FullDstRegisters[0].DstRegister.WriteMask != 0x1)
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
|
||||
aos_release_xmm_reg(cp, tmp.idx);
|
||||
store_dest(cp, &op->FullDstRegisters[0], dst);
|
||||
|
|
@ -1233,7 +1239,8 @@ static boolean emit_RCP( struct aos_compilation *cp, const struct tgsi_full_inst
|
|||
sse_divss(cp->func, dst, arg0);
|
||||
}
|
||||
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
if (op->FullDstRegisters[0].DstRegister.WriteMask != 0x1)
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
|
||||
store_dest(cp, &op->FullDstRegisters[0], dst);
|
||||
return TRUE;
|
||||
|
|
@ -1249,7 +1256,8 @@ static boolean emit_RSQ( struct aos_compilation *cp, const struct tgsi_full_inst
|
|||
/* Extend precision here...
|
||||
*/
|
||||
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
if (op->FullDstRegisters[0].DstRegister.WriteMask != 0x1)
|
||||
sse_shufps(cp->func, dst, dst, SHUF(X, X, X, X));
|
||||
|
||||
store_dest(cp, &op->FullDstRegisters[0], dst);
|
||||
return TRUE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue