draw: remove EXP & LOG from vs_aos.c

These don't get hit & look like bug magnets to me...
This commit is contained in:
Keith Whitwell 2008-05-25 15:45:27 +01:00
parent ce331e3a5e
commit 3afb7198e0

View file

@ -1066,85 +1066,6 @@ static boolean emit_EX2( struct aos_compilation *cp, const struct tgsi_full_inst
return TRUE;
}
static boolean emit_EXP( struct aos_compilation *cp, const struct tgsi_full_instruction *op )
{
struct x86_reg dst = get_dst_ptr(cp, &op->FullDstRegisters[0]);
struct x86_reg st0 = x86_make_reg(file_x87, 0);
struct x86_reg st1 = x86_make_reg(file_x87, 1);
struct x86_reg st3 = x86_make_reg(file_x87, 3);
unsigned writemask = op->FullDstRegisters[0].DstRegister.WriteMask;
/* CAUTION: dst may alias arg0!
*/
x87_fld_src(cp, &op->FullSrcRegisters[0], 0); /* arg0.x */
x87_fld(cp->func, st0); /* arg arg */
/* by default, fpu is setup to round-to-nearest. We want to
* change this now, and track the state through to the end of the
* generated function so that it isn't repeated unnecessarily.
* Alternately, could subtract .5 to get round to -inf behaviour.
*/
set_fpu_round_neg_inf( cp );
x87_fprndint( cp->func ); /* flr(a) a */
x87_fld(cp->func, st0); /* flr(a) flr(a) a */
x87_fld1(cp->func); /* 1 floor(a) floor(a) a */
x87_fst_or_nop(cp->func, writemask, 3, dst); /* stack unchanged */
x87_fscale(cp->func); /* 2^floor(a) floor(a) a */
x87_fst(cp->func, st3); /* 2^floor(a) floor(a) a 2^floor(a)*/
x87_fstp_or_pop(cp->func, writemask, 0, dst); /* flr(a) a 2^flr(a) */
x87_fsubp(cp->func, st1); /* frac(a) 2^flr(a) */
x87_fst_or_nop(cp->func, writemask, 1, dst); /* frac(a) 2^flr(a) */
x87_f2xm1(cp->func); /* (2^frac(a))-1 2^flr(a)*/
x87_fld1(cp->func); /* 1 (2^frac(a))-1 2^flr(a)*/
x87_faddp(cp->func, st1); /* 2^frac(a) 2^flr(a) */
x87_fmulp(cp->func, st1); /* 2^a */
x87_fstp_or_pop(cp->func, writemask, 2, dst);
/* dst[0] = 2^floor(tmp); */
/* dst[1] = frac(tmp); */
/* dst[2] = 2^floor(tmp) * 2^frac(tmp); */
/* dst[3] = 1.0F; */
return TRUE;
}
static boolean emit_LOG( struct aos_compilation *cp, const struct tgsi_full_instruction *op )
{
struct x86_reg dst = get_dst_ptr(cp, &op->FullDstRegisters[0]);
struct x86_reg st0 = x86_make_reg(file_x87, 0);
struct x86_reg st1 = x86_make_reg(file_x87, 1);
struct x86_reg st2 = x86_make_reg(file_x87, 2);
unsigned writemask = op->FullDstRegisters[0].DstRegister.WriteMask;
/* CAUTION: dst may alias arg0!
*/
x87_fld_src(cp, &op->FullSrcRegisters[0], 0); /* arg0.x */
x87_fabs(cp->func); /* |arg0.x| */
x87_fxtract(cp->func); /* mantissa(arg0.x), exponent(arg0.x) */
x87_fst(cp->func, st2); /* mantissa, exponent, mantissa */
x87_fld1(cp->func); /* 1, mantissa, exponent, mantissa */
x87_fyl2x(cp->func); /* log2(mantissa), exponent, mantissa */
x87_fadd(cp->func, st0, st1); /* e+l2(m), e, m */
x87_fstp_or_pop(cp->func, writemask, 2, dst); /* e, m */
x87_fld1(cp->func); /* 1, e, m */
x87_fsub(cp->func, st1, st0); /* 1, e-1, m */
x87_fstp_or_pop(cp->func, writemask, 3, dst); /* e-1,m */
x87_fstp_or_pop(cp->func, writemask, 0, dst); /* m */
x87_fadd(cp->func, st0, st0); /* 2m */
x87_fstp_or_pop( cp->func, writemask, 1, dst );
return TRUE;
}
static boolean emit_FLR( struct aos_compilation *cp, const struct tgsi_full_instruction *op )
{
@ -1755,10 +1676,12 @@ emit_instruction( struct aos_compilation *cp,
return emit_RSQ(cp, inst);
case TGSI_OPCODE_EXP:
return emit_EXP(cp, inst);
/*return emit_EXP(cp, inst);*/
return FALSE;
case TGSI_OPCODE_LOG:
return emit_LOG(cp, inst);
/*return emit_LOG(cp, inst);*/
return FALSE;
case TGSI_OPCODE_MUL:
return emit_MUL(cp, inst);