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 );