00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
#include "stdio.h"
00027 
#include "string.h"
00028 
#include "ntos.h"
00029 
00030 
00031 
00032 
00033 
00034 #define SI (1 << 2)
00035 #define SU (1 << 3)
00036 #define SO (1 << 4)
00037 #define SZ (1 << 5)
00038 #define SV (1 << 6)
00039 
00040 #define EI (1 << 7)
00041 #define EU (1 << 8)
00042 #define EO (1 << 9)
00043 #define EZ (1 << 10)
00044 #define EV (1 << 11)
00045 
00046 #define XI (1 << 12)
00047 #define XU (1 << 13)
00048 #define XO (1 << 14)
00049 #define XZ (1 << 15)
00050 #define XV (1 << 16)
00051 
00052 #define CC (1 << 23)
00053 
00054 #define FS (1 << 24)
00055 
00056 
00057 
00058 
00059 
00060 #define MINUS_DOUBLE_INFINITY_VALUE (DOUBLE_INFINITY_VALUE_HIGH | (1 << 31))
00061 #define MINUS_SINGLE_INFINITY_VALUE (SINGLE_INFINITY_VALUE | (1 << 31))
00062 
00063 
00064 
00065 
00066 
00067 #define DOUBLE_SIGNAL_NAN_PREFIX 0x7ff80000
00068 #define SINGLE_SIGNAL_NAN_PREFIX 0x7fc00000
00069 
00070 
00071 
00072 
00073 
00074 #define SIGN (1 << 31)
00075 
00076 
00077 
00078 
00079 
00080 typedef union _FLOATING_STATUS {
00081     FSR 
Status;
00082     ULONG 
Data;
00083 } 
FLOATING_STATUS, *
PFLOATING_STATUS;
00084 
00085 
00086 
00087 
00088 
00089 ULONG
00090 
AddDouble (
00091     IN ULONG RoundingMode,
00092     IN PULARGE_INTEGER Addend1,
00093     IN PULARGE_INTEGER Addend2,
00094     OUT PULARGE_INTEGER Result
00095     );
00096 
00097 ULONG
00098 
DivideDouble (
00099     IN ULONG RoundingMode,
00100     IN PULARGE_INTEGER Dividend,
00101     IN PULARGE_INTEGER Divisor,
00102     OUT PULARGE_INTEGER Result
00103     );
00104 
00105 ULONG
00106 
MultiplyDouble (
00107     IN ULONG RoundingMode,
00108     IN PULARGE_INTEGER Multiplicand,
00109     IN PULARGE_INTEGER Multiplier,
00110     OUT PULARGE_INTEGER Result
00111     );
00112 
00113 ULONG
00114 
SubtractDouble (
00115     IN ULONG RoundingMode,
00116     IN PULARGE_INTEGER Subtrahend,
00117     IN PULARGE_INTEGER Minuend,
00118     OUT PULARGE_INTEGER Result
00119     );
00120 
00121 ULONG
00122 
AddSingle (
00123     IN ULONG RoundingMode,
00124     IN ULONG Addend1,
00125     IN ULONG Addend2,
00126     OUT PULONG Result
00127     );
00128 
00129 ULONG
00130 
DivideSingle (
00131     IN ULONG RoundingMode,
00132     IN ULONG Dividend,
00133     IN ULONG Divisor,
00134     OUT PULONG Result
00135     );
00136 
00137 ULONG
00138 
MultiplySingle (
00139     IN ULONG RoundingMode,
00140     IN ULONG Multiplicand,
00141     IN ULONG Multiplier,
00142     OUT PULONG Result
00143     );
00144 
00145 ULONG
00146 
SubtractSingle (
00147     IN ULONG RoundingMode,
00148     IN ULONG Subtrahend,
00149     IN ULONG Minuend,
00150     OUT PULONG Result
00151     );
00152 
00153 ULONG
00154 
AbsoluteDouble (
00155     IN ULONG RoundingMode,
00156     IN PULARGE_INTEGER Operand,
00157     OUT PULARGE_INTEGER Result
00158     );
00159 
00160 ULONG
00161 
CeilToLongwordFromDouble (
00162     IN ULONG RoundingMode,
00163     IN PULARGE_INTEGER Source,
00164     OUT PULONG Result
00165     );
00166 
00167 ULONG
00168 
CeilToLongwordFromSingle (
00169     IN ULONG RoundingMode,
00170     IN ULONG Source,
00171     OUT PULONG Result
00172     );
00173 
00174 ULONG
00175 
ConvertToDoubleFromSingle (
00176     IN ULONG RoundingMode,
00177     IN ULONG Source,
00178     OUT PULARGE_INTEGER Result
00179     );
00180 
00181 ULONG
00182 
ConvertToLongwordFromDouble (
00183     IN ULONG RoundingMode,
00184     IN PULARGE_INTEGER Source,
00185     OUT PULONG Result
00186     );
00187 
00188 ULONG
00189 
ConvertToLongwordFromSingle (
00190     IN ULONG RoundingMode,
00191     IN ULONG Source,
00192     OUT PULONG Result
00193     );
00194 
00195 ULONG
00196 
ConvertToSingleFromDouble (
00197     IN ULONG RoundingMode,
00198     IN PULARGE_INTEGER Source,
00199     OUT PULONG Result
00200     );
00201 
00202 ULONG
00203 
CompareFDouble (
00204     IN ULONG RoundingMode,
00205     IN PULARGE_INTEGER Comparand1,
00206     IN PULARGE_INTEGER Comparand2
00207     );
00208 
00209 ULONG
00210 
CompareUnDouble (
00211     IN ULONG RoundingMode,
00212     IN PULARGE_INTEGER Comparand1,
00213     IN PULARGE_INTEGER Comparand2
00214     );
00215 
00216 ULONG
00217 
CompareEqDouble (
00218     IN ULONG RoundingMode,
00219     IN PULARGE_INTEGER Comparand1,
00220     IN PULARGE_INTEGER Comparand2
00221     );
00222 
00223 ULONG
00224 
CompareUeqDouble (
00225     IN ULONG RoundingMode,
00226     IN PULARGE_INTEGER Comparand1,
00227     IN PULARGE_INTEGER Comparand2
00228     );
00229 
00230 ULONG
00231 
CompareOltDouble (
00232     IN ULONG RoundingMode,
00233     IN PULARGE_INTEGER Comparand1,
00234     IN PULARGE_INTEGER Comparand2
00235     );
00236 
00237 ULONG
00238 
CompareUltDouble (
00239     IN ULONG RoundingMode,
00240     IN PULARGE_INTEGER Comparand1,
00241     IN PULARGE_INTEGER Comparand2
00242     );
00243 
00244 ULONG
00245 
CompareOleDouble (
00246     IN ULONG RoundingMode,
00247     IN PULARGE_INTEGER Comparand1,
00248     IN PULARGE_INTEGER Comparand2
00249     );
00250 
00251 ULONG
00252 
CompareUleDouble (
00253     IN ULONG RoundingMode,
00254     IN PULARGE_INTEGER Comparand1,
00255     IN PULARGE_INTEGER Comparand2
00256     );
00257 
00258 ULONG
00259 
CompareSfDouble (
00260     IN ULONG RoundingMode,
00261     IN PULARGE_INTEGER Comparand1,
00262     IN PULARGE_INTEGER Comparand2
00263     );
00264 
00265 ULONG
00266 
CompareNgleDouble (
00267     IN ULONG RoundingMode,
00268     IN PULARGE_INTEGER Comparand1,
00269     IN PULARGE_INTEGER Comparand2
00270     );
00271 
00272 ULONG
00273 
CompareSeqDouble (
00274     IN ULONG RoundingMode,
00275     IN PULARGE_INTEGER Comparand1,
00276     IN PULARGE_INTEGER Comparand2
00277     );
00278 
00279 ULONG
00280 
CompareNglDouble (
00281     IN ULONG RoundingMode,
00282     IN PULARGE_INTEGER Comparand1,
00283     IN PULARGE_INTEGER Comparand2
00284     );
00285 
00286 ULONG
00287 
CompareLtDouble (
00288     IN ULONG RoundingMode,
00289     IN PULARGE_INTEGER Comparand1,
00290     IN PULARGE_INTEGER Comparand2
00291     );
00292 
00293 ULONG
00294 
CompareNgeDouble (
00295     IN ULONG RoundingMode,
00296     IN PULARGE_INTEGER Comparand1,
00297     IN PULARGE_INTEGER Comparand2
00298     );
00299 
00300 ULONG
00301 
CompareLeDouble (
00302     IN ULONG RoundingMode,
00303     IN PULARGE_INTEGER Comparand1,
00304     IN PULARGE_INTEGER Comparand2
00305     );
00306 
00307 ULONG
00308 
CompareNgtDouble (
00309     IN ULONG RoundingMode,
00310     IN PULARGE_INTEGER Comparand1,
00311     IN PULARGE_INTEGER Comparand2
00312     );
00313 
00314 ULONG
00315 
CompareFSingle (
00316     IN ULONG RoundingMode,
00317     IN ULONG Comparand1,
00318     IN ULONG Comparand2
00319     );
00320 
00321 ULONG
00322 
CompareUnSingle (
00323     IN ULONG RoundingMode,
00324     IN ULONG Comparand1,
00325     IN ULONG Comparand2
00326     );
00327 
00328 ULONG
00329 
CompareEqSingle (
00330     IN ULONG RoundingMode,
00331     IN ULONG Comparand1,
00332     IN ULONG Comparand2
00333     );
00334 
00335 ULONG
00336 
CompareUeqSingle (
00337     IN ULONG RoundingMode,
00338     IN ULONG Comparand1,
00339     IN ULONG Comparand2
00340     );
00341 
00342 ULONG
00343 
CompareOltSingle (
00344     IN ULONG RoundingMode,
00345     IN ULONG Comparand1,
00346     IN ULONG Comparand2
00347     );
00348 
00349 ULONG
00350 
CompareUltSingle (
00351     IN ULONG RoundingMode,
00352     IN ULONG Comparand1,
00353     IN ULONG Comparand2
00354     );
00355 
00356 ULONG
00357 
CompareOleSingle (
00358     IN ULONG RoundingMode,
00359     IN ULONG Comparand1,
00360     IN ULONG Comparand2
00361     );
00362 
00363 ULONG
00364 
CompareUleSingle (
00365     IN ULONG RoundingMode,
00366     IN ULONG Comparand1,
00367     IN ULONG Comparand2
00368     );
00369 
00370 ULONG
00371 
CompareSfSingle (
00372     IN ULONG RoundingMode,
00373     IN ULONG Comparand1,
00374     IN ULONG Comparand2
00375     );
00376 
00377 ULONG
00378 
CompareNgleSingle (
00379     IN ULONG RoundingMode,
00380     IN ULONG Comparand1,
00381     IN ULONG Comparand2
00382     );
00383 
00384 ULONG
00385 
CompareSeqSingle (
00386     IN ULONG RoundingMode,
00387     IN ULONG Comparand1,
00388     IN ULONG Comparand2
00389     );
00390 
00391 ULONG
00392 
CompareNglSingle (
00393     IN ULONG RoundingMode,
00394     IN ULONG Comparand1,
00395     IN ULONG Comparand2
00396     );
00397 
00398 ULONG
00399 
CompareLtSingle (
00400     IN ULONG RoundingMode,
00401     IN ULONG Comparand1,
00402     IN ULONG Comparand2
00403     );
00404 
00405 ULONG
00406 
CompareNgeSingle (
00407     IN ULONG RoundingMode,
00408     IN ULONG Comparand1,
00409     IN ULONG Comparand2
00410     );
00411 
00412 ULONG
00413 
CompareLeSingle (
00414     IN ULONG RoundingMode,
00415     IN ULONG Comparand1,
00416     IN ULONG Comparand2
00417     );
00418 
00419 ULONG
00420 
CompareNgtSingle (
00421     IN ULONG RoundingMode,
00422     IN ULONG Comparand1,
00423     IN ULONG Comparand2
00424     );
00425 
00426 ULONG
00427 
FloorToLongwordFromDouble (
00428     IN ULONG RoundingMode,
00429     IN PULARGE_INTEGER Source,
00430     OUT PULONG Result
00431     );
00432 
00433 ULONG
00434 
FloorToLongwordFromSingle (
00435     IN ULONG RoundingMode,
00436     IN ULONG Source,
00437     OUT PULONG Result
00438     );
00439 
00440 ULONG
00441 
MoveDouble (
00442     IN ULONG RoundingMode,
00443     IN PULARGE_INTEGER Operand,
00444     OUT PULARGE_INTEGER Result
00445     );
00446 
00447 ULONG
00448 
NegateDouble (
00449     IN ULONG RoundingMode,
00450     IN PULARGE_INTEGER Operand,
00451     OUT PULARGE_INTEGER Result
00452     );
00453 
00454 ULONG
00455 
AbsoluteSingle (
00456     IN ULONG RoundingMode,
00457     IN ULONG Operand,
00458     OUT PULONG Result
00459     );
00460 
00461 ULONG
00462 
MoveSingle (
00463     IN ULONG RoundingMode,
00464     IN ULONG Operand,
00465     OUT PULONG Result
00466     );
00467 
00468 ULONG
00469 
NegateSingle (
00470     IN ULONG RoundingMode,
00471     IN ULONG Operand,
00472     OUT PULONG Result
00473     );
00474 
00475 ULONG
00476 
RoundToLongwordFromDouble (
00477     IN ULONG RoundingMode,
00478     IN PULARGE_INTEGER Source,
00479     OUT PULONG Result
00480     );
00481 
00482 ULONG
00483 
RoundToLongwordFromSingle (
00484     IN ULONG RoundingMode,
00485     IN ULONG Source,
00486     OUT PULONG Result
00487     );
00488 
00489 ULONG
00490 
TruncateToLongwordFromDouble (
00491     IN ULONG RoundingMode,
00492     IN PULARGE_INTEGER Source,
00493     OUT PULONG Result
00494     );
00495 
00496 ULONG
00497 
TruncateToLongwordFromSingle (
00498     IN ULONG RoundingMode,
00499     IN ULONG Source,
00500     OUT PULONG Result
00501     );
00502 
00503 
VOID
00504 
Test1 (
00505     VOID
00506     );
00507 
00508 
VOID
00509 
Test2 (
00510     VOID
00511     );
00512 
00513 
VOID
00514 
Test3 (
00515     VOID
00516     );
00517 
00518 
VOID
00519 
Test4 (
00520     VOID
00521     );
00522 
00523 
VOID
00524 
Test5 (
00525     VOID
00526     );
00527 
00528 
VOID
00529 
Test6 (
00530     VOID
00531     );
00532 
00533 
VOID
00534 
Test7 (
00535     VOID
00536     );
00537 
00538 
VOID
00539 
Test8 (
00540     VOID
00541     );
00542 
00543 
VOID
00544 
Test9 (
00545     VOID
00546     );
00547 
00548 
VOID
00549 
Test10 (
00550     VOID
00551     );
00552 
00553 
VOID
00554 
Test11 (
00555     VOID
00556     );
00557 
00558 
VOID
00559 
Test12 (
00560     VOID
00561     );
00562 
00563 
VOID
00564 
Test13 (
00565     VOID
00566     );
00567 
00568 
VOID
00569 
Test14 (
00570     VOID
00571     );
00572 
00573 
VOID
00574 
Test15 (
00575     VOID
00576     );
00577 
00578 
VOID
00579 
Test16 (
00580     VOID
00581     );
00582 
00583 
VOID
00584 
Test17 (
00585     VOID
00586     );
00587 
00588 
VOID
00589 
Test18 (
00590     VOID
00591     );
00592 
00593 
VOID
00594 
Test19 (
00595     VOID
00596     );
00597 
00598 
VOID
00599 
Test20 (
00600     VOID
00601     );
00602 
00603 
VOID
00604 
Test21 (
00605     VOID
00606     );
00607 
00608 
VOID
00609 
Test22 (
00610     VOID
00611     );
00612 
00613 
VOID
00614 
Test23 (
00615     VOID
00616     );
00617 
00618 
VOID
00619 
Test24 (
00620     VOID
00621     );
00622 
00623 
VOID
00624 
Test25 (
00625     VOID
00626     );
00627 
00628 
VOID
00629 
Test26 (
00630     VOID
00631     );