Browse Source

gallium: added ppc_vload_float(), for limited cases

tags/mesa_20090313
Brian Paul 17 years ago
parent
commit
b06d072019
2 changed files with 22 additions and 0 deletions
  1. 18
    0
      src/gallium/auxiliary/rtasm/rtasm_ppc.c
  2. 4
    0
      src/gallium/auxiliary/rtasm/rtasm_ppc.h

+ 18
- 0
src/gallium/auxiliary/rtasm/rtasm_ppc.c 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);
}
}




/**

+ 4
- 0
src/gallium/auxiliary/rtasm/rtasm_ppc.h 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);



/**

Loading…
Cancel
Save