gallium: added ppc_vload_float(), for limited cases

This commit is contained in:
Brian Paul 2008-10-22 14:48:33 -06:00
parent da63edd720
commit b06d072019
2 changed files with 22 additions and 0 deletions

View file

@ -603,6 +603,24 @@ ppc_lvewx(struct ppc_function *p, uint vr, uint ra, uint rb)
emit_x(p, 31, vr, ra, rb, 71);
}
/** vector load float: vr = splats(imm) */
void
ppc_vload_float(struct ppc_function *p, uint vr, float imm)
{
if (imm == 0.0f) {
ppc_vxor(p, vr, vr, vr);
}
else if (imm == 1.0f) {
/* use 2^0=1 to get 1.0 */
ppc_vxor(p, vr, vr, vr); /* vr = {0,0,0,0} */
ppc_vexptefp(p, vr, vr); /* vr = 0^0 */
}
else {
assert(0);
}
}
/**

View file

@ -158,6 +158,10 @@ ppc_lvx(struct ppc_function *p, uint vR, uint vA, uint vB);
extern void
ppc_lvewx(struct ppc_function *p, uint vR, uint vA, uint vB);
/** vector load float: vr = splats(imm) */
extern void
ppc_vload_float(struct ppc_function *p, uint vr, float imm);
/**