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
STDCALL
EngSaveFloatingPointState(OUT VOID *Buffer,
IN ULONG BufferSize)
IN ULONG BufferSize)
{
KFLOATING_SAVE TempBuffer;
NTSTATUS Status;
@ -79,9 +79,9 @@ EngSaveFloatingPointState(OUT VOID *Buffer,
/* Check for floating point support. */
Status = KeSaveFloatingPointState(&TempBuffer);
if (Status != STATUS_SUCCESS)
{
return(0);
}
{
return(0);
}
KeRestoreFloatingPointState(&TempBuffer);
return(sizeof(KFLOATING_SAVE));
}
@ -153,90 +153,165 @@ FtoEF( EFLOAT_S * efp, FLOATL f)
VOID
STDCALL
FLOATOBJ_Add (
IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
{
// 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
STDCALL
FLOATOBJ_AddFloat(
IN OUT PFLOATOBJ pf,
IN FLOATL f
)
IN OUT PFLOATOBJ pf,
IN FLOATL f
)
{
// 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
STDCALL
FLOATOBJ_AddLong(
IN OUT PFLOATOBJ pf,
IN LONG l
)
IN OUT PFLOATOBJ pf,
IN LONG l
)
{
// 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
STDCALL
FLOATOBJ_Div(
IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
{
// 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
STDCALL
FLOATOBJ_DivFloat(
IN OUT PFLOATOBJ pf,
IN FLOATL f
)
IN OUT PFLOATOBJ pf,
IN FLOATL f
)
{
// 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
STDCALL
FLOATOBJ_DivLong(
IN OUT PFLOATOBJ pf,
IN LONG l
)
IN OUT PFLOATOBJ pf,
IN LONG l
)
{
// 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
STDCALL
FLOATOBJ_Equal(
IN PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
IN PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
{
// 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;
}
BOOL
STDCALL
FLOATOBJ_EqualLong(
IN PFLOATOBJ pf,
IN LONG l
)
IN PFLOATOBJ pf,
IN LONG l
)
{
// 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;
}
@ -267,82 +342,133 @@ FLOATOBJ_GetLong ( IN PFLOATOBJ pf )
BOOL
STDCALL
FLOATOBJ_GreaterThan(
IN PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
IN PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
{
// 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;
}
BOOL
STDCALL
FLOATOBJ_GreaterThanLong(
IN PFLOATOBJ pf,
IN LONG l
)
IN PFLOATOBJ pf,
IN LONG l
)
{
// 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;
}
BOOL
STDCALL
FLOATOBJ_LessThan(
IN PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
IN PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
{
// 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;
}
BOOL
STDCALL
FLOATOBJ_LessThanLong(
IN PFLOATOBJ pf,
IN LONG l
)
IN PFLOATOBJ pf,
IN LONG l
)
{
// 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;
}
VOID
STDCALL
FLOATOBJ_Mul(
IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
{
// 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
STDCALL
FLOATOBJ_MulFloat(
IN OUT PFLOATOBJ pf,
IN FLOATL f
)
IN OUT PFLOATOBJ pf,
IN FLOATL f
)
{
// 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
STDCALL
FLOATOBJ_MulLong(
IN OUT PFLOATOBJ pf,
IN LONG l
)
IN OUT PFLOATOBJ pf,
IN LONG l
)
{
// 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
@ -357,9 +483,9 @@ FLOATOBJ_Neg ( IN OUT PFLOATOBJ pf )
VOID
STDCALL
FLOATOBJ_SetFloat(
OUT PFLOATOBJ pf,
IN FLOATL f
)
OUT PFLOATOBJ pf,
IN FLOATL f
)
{
// www.osr.com/ddk/graphics/gdifncs_1prb.htm
EFLOAT_S * efp = (EFLOAT_S *)pf;
@ -369,9 +495,9 @@ FLOATOBJ_SetFloat(
VOID
STDCALL
FLOATOBJ_SetLong(
OUT PFLOATOBJ pf,
IN LONG l
)
OUT PFLOATOBJ pf,
IN LONG l
)
{
// www.osr.com/ddk/graphics/gdifncs_0gpz.htm
EFLOAT_S * efp = (EFLOAT_S *)pf;
@ -387,32 +513,65 @@ FLOATOBJ_SetLong(
VOID
STDCALL
FLOATOBJ_Sub(
IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
IN OUT PFLOATOBJ pf,
IN PFLOATOBJ pf1
)
{
// 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
STDCALL
FLOATOBJ_SubFloat(
IN OUT PFLOATOBJ pf,
IN FLOATL f
)
IN OUT PFLOATOBJ pf,
IN FLOATL f
)
{
// 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
STDCALL
FLOATOBJ_SubLong(
IN OUT PFLOATOBJ pf,
IN LONG l
)
IN OUT PFLOATOBJ pf,
IN LONG l
)
{
// 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
}