draw: fix fpu control word manipulations

This commit is contained in:
Keith Whitwell
2008-05-21 20:32:43 +01:00
parent 194a7be28f
commit 2302a5d3c1
+20 -13
View File
@@ -690,41 +690,47 @@ static void x87_fstp_dest4( struct aos_compilation *cp,
x87_fstp_or_pop(cp->func, writemask, 3, ptr);
}
#define FPU_MANIP 1
/* Save current x87 state and put it into single precision mode.
*/
static void save_fpu_state( struct aos_compilation *cp )
{
#if 0
x87_fnstcw( cp->func, x86_make_disp(regEDX, get_offset(m, &m->fpucntl_restore)));
x87_fldcw( cp->func, );
#if FPU_MANIP
x87_fnstcw( cp->func, x86_make_disp(cp->machine_EDX,
Offset(struct aos_machine, fpu_restore)));
#endif
}
static void restore_fpu_state( struct aos_compilation *cp )
{
#if 0
#if FPU_MANIP
x87_fnclex(cp->func);
x87_fldcw(cp->func, x86_make_disp(regEDX, get_offset(m, &m->fpucntl_restore)));
x87_fldcw( cp->func, x86_make_disp(cp->machine_EDX,
Offset(struct aos_machine, fpu_restore)));
#endif
}
static void set_fpu_round_neg_inf( struct aos_compilation *cp )
{
#if 0
if (cp->fpucntl != RND_NEG_FPU) {
struct x86_reg regEDX = x86_make_reg(file_REG32, reg_DX);
struct arb_vp_machine *m = NULL;
cp->fpucntl = RND_NEG_FPU;
#if FPU_MANIP
if (cp->fpucntl != FPU_RND_NEG) {
cp->fpucntl = FPU_RND_NEG;
x87_fnclex(cp->func);
x87_fldcw(cp->func, x86_make_disp(regEDX, get_offset(m, &m->fpucntl_rnd_neg)));
x87_fldcw( cp->func, x86_make_disp(cp->machine_EDX,
Offset(struct aos_machine, fpu_rnd_neg_inf)));
}
#endif
}
static void set_fpu_round_nearest( struct aos_compilation *cp )
{
#if 0
#if FPU_MANIP
if (cp->fpucntl != FPU_RND_NEAREST) {
cp->fpucntl = FPU_RND_NEAREST;
x87_fnclex(cp->func);
x87_fldcw( cp->func, x86_make_disp(cp->machine_EDX,
Offset(struct aos_machine, fpu_rnd_nearest)));
}
#endif
}
@@ -1590,6 +1596,7 @@ static boolean build_vertex_program( struct draw_vs_varient_aos_sse *varient,
Offset( struct draw_vs_varient_aos_sse, machine )));
save_fpu_state( &cp );
set_fpu_round_nearest( &cp );
/* Note address for loop jump
*/