draw: Reuse xmm registers.
This commit is contained in:
parent
a719d70474
commit
8ef377d76b
|
@ -284,6 +284,15 @@ void aos_release_xmm_reg( struct aos_compilation *cp,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void aos_soft_release_xmm( struct aos_compilation *cp,
|
||||||
|
struct x86_reg reg )
|
||||||
|
{
|
||||||
|
if (reg.file == file_XMM) {
|
||||||
|
assert(cp->xmm[reg.idx].last_used == cp->insn_counter);
|
||||||
|
cp->xmm[reg.idx].last_used = cp->insn_counter - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Mark an xmm reg as holding the current copy of a shader reg.
|
/* Mark an xmm reg as holding the current copy of a shader reg.
|
||||||
|
@ -584,10 +593,12 @@ static struct x86_reg fetch_src( struct aos_compilation *cp,
|
||||||
sse_mulps(cp->func, dst, tmp);
|
sse_mulps(cp->func, dst, tmp);
|
||||||
|
|
||||||
aos_release_xmm_reg(cp, tmp.idx);
|
aos_release_xmm_reg(cp, tmp.idx);
|
||||||
|
aos_soft_release_xmm(cp, imm_swz);
|
||||||
}
|
}
|
||||||
else if (negs) {
|
else if (negs) {
|
||||||
struct x86_reg imm_negs = aos_get_internal_xmm(cp, IMM_NEGS);
|
struct x86_reg imm_negs = aos_get_internal_xmm(cp, IMM_NEGS);
|
||||||
sse_mulps(cp->func, dst, imm_negs);
|
sse_mulps(cp->func, dst, imm_negs);
|
||||||
|
aos_soft_release_xmm(cp, imm_negs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -603,8 +614,10 @@ static struct x86_reg fetch_src( struct aos_compilation *cp,
|
||||||
sse_maxps(cp->func, dst, tmp);
|
sse_maxps(cp->func, dst, tmp);
|
||||||
|
|
||||||
aos_release_xmm_reg(cp, tmp.idx);
|
aos_release_xmm_reg(cp, tmp.idx);
|
||||||
|
aos_soft_release_xmm(cp, neg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
aos_soft_release_xmm(cp, arg0);
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue