Finish up float.c, hopfully the div and sub math is right.

svn path=/trunk/; revision=26799
This commit is contained in:
James Tabor 2007-05-15 20:48:58 +00:00
parent 0a44b61c7f
commit 12ccaa3207

View file

@ -70,7 +70,7 @@ EngRestoreFloatingPointState ( IN VOID *Buffer )
ULONG ULONG
STDCALL STDCALL
EngSaveFloatingPointState(OUT VOID *Buffer, EngSaveFloatingPointState(OUT VOID *Buffer,
IN ULONG BufferSize) IN ULONG BufferSize)
{ {
KFLOATING_SAVE TempBuffer; KFLOATING_SAVE TempBuffer;
NTSTATUS Status; NTSTATUS Status;
@ -79,9 +79,9 @@ EngSaveFloatingPointState(OUT VOID *Buffer,
/* Check for floating point support. */ /* Check for floating point support. */
Status = KeSaveFloatingPointState(&TempBuffer); Status = KeSaveFloatingPointState(&TempBuffer);
if (Status != STATUS_SUCCESS) if (Status != STATUS_SUCCESS)
{ {
return(0); return(0);
} }
KeRestoreFloatingPointState(&TempBuffer); KeRestoreFloatingPointState(&TempBuffer);
return(sizeof(KFLOATING_SAVE)); return(sizeof(KFLOATING_SAVE));
} }
@ -153,90 +153,165 @@ FtoEF( EFLOAT_S * efp, FLOATL f)
VOID VOID
STDCALL STDCALL
FLOATOBJ_Add ( FLOATOBJ_Add (
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1 IN PFLOATOBJ pf1
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_2i3r.htm // www.osr.com/ddk/graphics/gdifncs_2i3r.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
EFLOAT_S * efp1 = (EFLOAT_S *)pf1;
gxf_long f;
gxf_long f1;
f.l = EFtoF(efp);
f1.l = EFtoF(efp1);
f.f = f.f + f1.f;
#ifdef _X86_
FtoEF( efp, f.l );
#else
FtoEF( efp, f.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_AddFloat( FLOATOBJ_AddFloat(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN FLOATL f IN FLOATL f
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_0ip3.htm // www.osr.com/ddk/graphics/gdifncs_0ip3.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long fe;
gxf_long f1;
fe.l = EFtoF(efp);
#ifdef _X86_
f1.l = f;
#else
f1.f = f;
#endif
fe.f = fe.f + f1.f;
#ifdef _X86_
FtoEF( efp, fe.l );
#else
FtoEF( efp, fe.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_AddLong( FLOATOBJ_AddLong(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN LONG l IN LONG l
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_12jr.htm // www.osr.com/ddk/graphics/gdifncs_12jr.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long f;
f.l = EFtoF(efp);
f.f = f.f + l;
#ifdef _X86_
FtoEF( efp, f.l );
#else
FtoEF( efp, f.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_Div( FLOATOBJ_Div(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1 IN PFLOATOBJ pf1
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_3ndz.htm // www.osr.com/ddk/graphics/gdifncs_3ndz.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
EFLOAT_S * efp1 = (EFLOAT_S *)pf1;
gxf_long f;
gxf_long f1;
f.l = EFtoF(efp);
f1.l = EFtoF(efp1);
f.f = f.f / f1.f;
#ifdef _X86_
FtoEF( efp, f.l );
#else
FtoEF( efp, f.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_DivFloat( FLOATOBJ_DivFloat(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN FLOATL f IN FLOATL f
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_0gfb.htm // www.osr.com/ddk/graphics/gdifncs_0gfb.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long fe;
gxf_long f1;
fe.l = EFtoF(efp);
#ifdef _X86_
f1.l = f;
#else
f1.f = f;
#endif
fe.f = fe.f / f1.f;
#ifdef _X86_
FtoEF( efp, fe.l );
#else
FtoEF( efp, fe.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_DivLong( FLOATOBJ_DivLong(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN LONG l IN LONG l
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_6jdz.htm // www.osr.com/ddk/graphics/gdifncs_6jdz.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long f;
f.l = EFtoF(efp);
f.f = f.f / l;
#ifdef _X86_
FtoEF( efp, f.l );
#else
FtoEF( efp, f.f );
#endif
} }
BOOL BOOL
STDCALL STDCALL
FLOATOBJ_Equal( FLOATOBJ_Equal(
IN PFLOATOBJ pf, IN PFLOATOBJ pf,
IN PFLOATOBJ pf1 IN PFLOATOBJ pf1
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_6ysn.htm // www.osr.com/ddk/graphics/gdifncs_6ysn.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
EFLOAT_S * efp1 = (EFLOAT_S *)pf1;
gxf_long f;
gxf_long f1;
f.l = EFtoF(efp);
f1.l = EFtoF(efp1);
if (f.f == f1.f) return TRUE;
return FALSE; return FALSE;
} }
BOOL BOOL
STDCALL STDCALL
FLOATOBJ_EqualLong( FLOATOBJ_EqualLong(
IN PFLOATOBJ pf, IN PFLOATOBJ pf,
IN LONG l IN LONG l
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_1pgn.htm // www.osr.com/ddk/graphics/gdifncs_1pgn.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long f;
f.l = EFtoF(efp);
if (f.f == l) return TRUE;
return FALSE; return FALSE;
} }
@ -267,82 +342,133 @@ FLOATOBJ_GetLong ( IN PFLOATOBJ pf )
BOOL BOOL
STDCALL STDCALL
FLOATOBJ_GreaterThan( FLOATOBJ_GreaterThan(
IN PFLOATOBJ pf, IN PFLOATOBJ pf,
IN PFLOATOBJ pf1 IN PFLOATOBJ pf1
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_8n53.htm // www.osr.com/ddk/graphics/gdifncs_8n53.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
EFLOAT_S * efp1 = (EFLOAT_S *)pf1;
gxf_long f;
gxf_long f1;
f.l = EFtoF(efp);
f1.l = EFtoF(efp1);
if(f.f > f1.f) return TRUE;
return FALSE; return FALSE;
} }
BOOL BOOL
STDCALL STDCALL
FLOATOBJ_GreaterThanLong( FLOATOBJ_GreaterThanLong(
IN PFLOATOBJ pf, IN PFLOATOBJ pf,
IN LONG l IN LONG l
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_6gx3.htm // www.osr.com/ddk/graphics/gdifncs_6gx3.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long f;
f.l = EFtoF(efp);
if (f.f > l) return TRUE;
return FALSE; return FALSE;
} }
BOOL BOOL
STDCALL STDCALL
FLOATOBJ_LessThan( FLOATOBJ_LessThan(
IN PFLOATOBJ pf, IN PFLOATOBJ pf,
IN PFLOATOBJ pf1 IN PFLOATOBJ pf1
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_1ynb.htm // www.osr.com/ddk/graphics/gdifncs_1ynb.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
EFLOAT_S * efp1 = (EFLOAT_S *)pf1;
gxf_long f;
gxf_long f1;
f.l = EFtoF(efp);
f1.l = EFtoF(efp1);
if(f.f < f1.f) return TRUE;
return FALSE; return FALSE;
} }
BOOL BOOL
STDCALL STDCALL
FLOATOBJ_LessThanLong( FLOATOBJ_LessThanLong(
IN PFLOATOBJ pf, IN PFLOATOBJ pf,
IN LONG l IN LONG l
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_9nzb.htm // www.osr.com/ddk/graphics/gdifncs_9nzb.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long f;
f.l = EFtoF(efp);
if (f.f < l) return TRUE;
return FALSE; return FALSE;
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_Mul( FLOATOBJ_Mul(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1 IN PFLOATOBJ pf1
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_8ppj.htm // www.osr.com/ddk/graphics/gdifncs_8ppj.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
EFLOAT_S * efp1 = (EFLOAT_S *)pf1;
gxf_long f;
gxf_long f1;
f.l = EFtoF(efp);
f1.l = EFtoF(efp1);
f.f = f1.f * f.f;
#ifdef _X86_
FtoEF( efp, f.l );
#else
FtoEF( efp, f.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_MulFloat( FLOATOBJ_MulFloat(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN FLOATL f IN FLOATL f
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_3puv.htm // www.osr.com/ddk/graphics/gdifncs_3puv.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long fe;
gxf_long f1;
fe.l = EFtoF(efp);
#ifdef _X86_
f1.l = f;
#else
f1.f = f;
#endif
fe.f = f1.f * fe.f;
#ifdef _X86_
FtoEF( efp, fe.l );
#else
FtoEF( efp, fe.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_MulLong( FLOATOBJ_MulLong(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN LONG l IN LONG l
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_56lj.htm // www.osr.com/ddk/graphics/gdifncs_56lj.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long f;
f.l = EFtoF(efp);
f.f = f.f * l;
#ifdef _X86_
FtoEF( efp, f.l );
#else
FtoEF( efp, f.f );
#endif
} }
VOID VOID
@ -357,9 +483,9 @@ FLOATOBJ_Neg ( IN OUT PFLOATOBJ pf )
VOID VOID
STDCALL STDCALL
FLOATOBJ_SetFloat( FLOATOBJ_SetFloat(
OUT PFLOATOBJ pf, OUT PFLOATOBJ pf,
IN FLOATL f IN FLOATL f
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_1prb.htm // www.osr.com/ddk/graphics/gdifncs_1prb.htm
EFLOAT_S * efp = (EFLOAT_S *)pf; EFLOAT_S * efp = (EFLOAT_S *)pf;
@ -369,9 +495,9 @@ FLOATOBJ_SetFloat(
VOID VOID
STDCALL STDCALL
FLOATOBJ_SetLong( FLOATOBJ_SetLong(
OUT PFLOATOBJ pf, OUT PFLOATOBJ pf,
IN LONG l IN LONG l
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_0gpz.htm // www.osr.com/ddk/graphics/gdifncs_0gpz.htm
EFLOAT_S * efp = (EFLOAT_S *)pf; EFLOAT_S * efp = (EFLOAT_S *)pf;
@ -387,32 +513,65 @@ FLOATOBJ_SetLong(
VOID VOID
STDCALL STDCALL
FLOATOBJ_Sub( FLOATOBJ_Sub(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1 IN PFLOATOBJ pf1
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_6lyf.htm // www.osr.com/ddk/graphics/gdifncs_6lyf.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
EFLOAT_S * efp1 = (EFLOAT_S *)pf1;
gxf_long f;
gxf_long f1;
f.l = EFtoF(efp);
f1.l = EFtoF(efp1);
f.f = f.f - f1.f;
#ifdef _X86_
FtoEF( efp, f.l );
#else
FtoEF( efp, f.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_SubFloat( FLOATOBJ_SubFloat(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN FLOATL f IN FLOATL f
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_2zvr.htm // www.osr.com/ddk/graphics/gdifncs_2zvr.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long fe;
gxf_long f1;
fe.l = EFtoF(efp);
#ifdef _X86_
f1.l = f;
#else
f1.f = f;
#endif
fe.f = fe.f - f1.f;
#ifdef _X86_
FtoEF( efp, fe.l );
#else
FtoEF( efp, fe.f );
#endif
} }
VOID VOID
STDCALL STDCALL
FLOATOBJ_SubLong( FLOATOBJ_SubLong(
IN OUT PFLOATOBJ pf, IN OUT PFLOATOBJ pf,
IN LONG l IN LONG l
) )
{ {
// www.osr.com/ddk/graphics/gdifncs_852f.htm // www.osr.com/ddk/graphics/gdifncs_852f.htm
UNIMPLEMENTED; EFLOAT_S * efp = (EFLOAT_S *)pf;
gxf_long f;
f.l = EFtoF(efp);
f.f = f.f - l;
#ifdef _X86_
FtoEF( efp, f.l );
#else
FtoEF( efp, f.f );
#endif
} }