ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

floatobj.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 #if defined(_M_IX86)
00004 
00005 FORCEINLINE
00006 BOOL
00007 _FLOATOBJ_Equal(FLOATOBJ *pf1, FLOATOBJ *pf2)
00008 {
00009     EFLOAT_S *pef1 = (EFLOAT_S*)pf1;
00010     EFLOAT_S *pef2 = (EFLOAT_S*)pf2;
00011     return (pef1->lMant == pef2->lMant && pef1->lExp == pef2->lExp);
00012 }
00013 
00014 FORCEINLINE
00015 LONG
00016 _FLOATOBJ_GetLong(FLOATOBJ *pf)
00017 {
00018     EFLOAT_S *pef = (EFLOAT_S*)pf;
00019     return pef->lMant >> (32 - pef->lExp);
00020 }
00021 
00022 FORCEINLINE
00023 LONG
00024 _FLOATOBJ_GetFix(FLOATOBJ *pf)
00025 {
00026     EFLOAT_S *pef = (EFLOAT_S*)pf;
00027     LONG Shift = (28 - pef->lExp);
00028     return (Shift >= 0 ? pef->lMant >> Shift : pef->lMant << -Shift);
00029 }
00030 
00031 FORCEINLINE
00032 BOOL
00033 _FLOATOBJ_IsLong(FLOATOBJ *pf)
00034 {
00035     EFLOAT_S *pef = (EFLOAT_S*)pf;
00036     ULONG Shift = 32 - pef->lExp;
00037     if (Shift > 31) return FALSE;
00038     return (((pef->lMant >> Shift) << Shift) == pef->lMant);
00039 }
00040 
00041 FORCEINLINE
00042 BOOL
00043 _FLOATOBJ_Equal0(FLOATOBJ *pf)
00044 {
00045     EFLOAT_S *pef = (EFLOAT_S*)pf;
00046     return (pef->lMant == 0 && pef->lExp == 0);
00047 }
00048 
00049 FORCEINLINE
00050 BOOL
00051 _FLOATOBJ_Equal1(FLOATOBJ *pf)
00052 {
00053     EFLOAT_S *pef = (EFLOAT_S*)pf;
00054     return (pef->lMant == 0x40000000 && pef->lExp == 2);
00055 }
00056 
00057 extern const FLOATOBJ gef0;
00058 extern const FLOATOBJ gef1;
00059 extern const FLOATOBJ gef16;
00060 
00061 #define FLOATOBJ_0 {0x00000000, 0x00000000}
00062 #define FLOATOBJ_1 {0x40000000, 0x00000002}
00063 #define FLOATOBJ_16 {0x40000000, 0x00000006}
00064 #define FLOATOBJ_1_16 {0x40000000, 0xfffffffe}
00065 
00066 #define FLOATOBJ_Set0(fo) (fo)->ul1 = 0; (fo)->ul2 = 0;
00067 #define FLOATOBJ_Set1(fo) (fo)->ul1 = 0x40000000; (fo)->ul2 = 2;
00068 
00069 #else
00070 
00071 #define _FLOATOBJ_Equal(pf,pf1) (*(pf) == *(pf1))
00072 #define _FLOATOBJ_GetLong(pf) ((LONG)*(pf))
00073 #define _FLOATOBJ_IsLong(pf) ((FLOAT)((LONG)*(pf)) == *(pf))
00074 #define _FLOATOBJ_Equal0(pf) (*(pf) == 0.)
00075 #define _FLOATOBJ_Equal1(pf) (*(pf) == 1.)
00076 #define _FLOATOBJ_GetFix(pf) ((LONG)(*(pf) * 16.))
00077 
00078 #define FLOATOBJ_0 0.
00079 #define FLOATOBJ_1 1.
00080 #define FLOATOBJ_16 16.
00081 #define FLOATOBJ_1_16 (1./16.)
00082 
00083 #define gef0 FLOATOBJ_0
00084 #define gef1 FLOATOBJ_1
00085 #define gef16 FLOATOBJ_16
00086 
00087 #define FLOATOBJ_Set0(fo) *(fo) = 0;
00088 #define FLOATOBJ_Set1(fo) *(fo) = 1;
00089 
00090 #endif

Generated on Fri May 25 2012 04:36:30 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.