05683 {
05684
05685 ULONG
Count;
05686 ULARGE_INTEGER DoubleOperand1;
05687 ULARGE_INTEGER DoubleOperand2;
05688 ULARGE_INTEGER DoubleResult;
05689
FLOATING_STATUS Fsr;
05690 ULONG Subtest;
05691
05692
05693
05694
05695
05696 Subtest = 0;
05697 printf(
" Test 17 - multiply double ...");
05698 Subtest += 1;
05699 DoubleOperand1.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05700 DoubleOperand1.HighPart = DOUBLE_INFINITY_VALUE_HIGH;
05701 DoubleOperand2.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05702 DoubleOperand2.HighPart = DOUBLE_INFINITY_VALUE_HIGH;
05703 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05704 &DoubleOperand1,
05705 &DoubleOperand2,
05706 &DoubleResult);
05707
05708
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
05709 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
05710 (DoubleResult.HighPart != DOUBLE_INFINITY_VALUE_HIGH)) {
05711
goto TestFailed;
05712 }
05713
05714 Subtest += 1;
05715 DoubleOperand1.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05716 DoubleOperand1.HighPart = DOUBLE_INFINITY_VALUE_HIGH;
05717 DoubleOperand2.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05718 DoubleOperand2.HighPart =
MINUS_DOUBLE_INFINITY_VALUE;
05719 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05720 &DoubleOperand1,
05721 &DoubleOperand2,
05722 &DoubleResult);
05723
05724
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
05725 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
05726 (DoubleResult.HighPart !=
MINUS_DOUBLE_INFINITY_VALUE)) {
05727
goto TestFailed;
05728 }
05729
05730 Subtest += 1;
05731 DoubleOperand1.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05732 DoubleOperand1.HighPart =
MINUS_DOUBLE_INFINITY_VALUE;
05733 DoubleOperand2.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05734 DoubleOperand2.HighPart =
MINUS_DOUBLE_INFINITY_VALUE;
05735 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05736 &DoubleOperand1,
05737 &DoubleOperand2,
05738 &DoubleResult);
05739
05740
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
05741 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
05742 (DoubleResult.HighPart != DOUBLE_INFINITY_VALUE_HIGH)) {
05743
goto TestFailed;
05744 }
05745
05746 Subtest += 1;
05747 DoubleOperand1.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05748 DoubleOperand1.HighPart =
MINUS_DOUBLE_INFINITY_VALUE;
05749 DoubleOperand2.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05750 DoubleOperand2.HighPart = DOUBLE_INFINITY_VALUE_HIGH;
05751 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05752 &DoubleOperand1,
05753 &DoubleOperand2,
05754 &DoubleResult);
05755
05756
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
05757 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
05758 (DoubleResult.HighPart !=
MINUS_DOUBLE_INFINITY_VALUE)) {
05759
goto TestFailed;
05760 }
05761
05762 Subtest += 1;
05763 DoubleOperand1.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05764 DoubleOperand1.HighPart = DOUBLE_INFINITY_VALUE_HIGH;
05765 DoubleOperand2.LowPart = 0x0;
05766 DoubleOperand2.HighPart = 0x0;
05767 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05768 &DoubleOperand1,
05769 &DoubleOperand2,
05770 &DoubleResult);
05771
05772
if ((Fsr.
Data != (
SV |
XV | ROUND_TO_NEAREST)) ||
05773 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05774 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05775
goto TestFailed;
05776 }
05777
05778 Subtest += 1;
05779 DoubleOperand1.LowPart = 0x0;
05780 DoubleOperand1.HighPart = 0x0;
05781 DoubleOperand2.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05782 DoubleOperand2.HighPart = DOUBLE_INFINITY_VALUE_HIGH;
05783 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05784 &DoubleOperand1,
05785 &DoubleOperand2,
05786 &DoubleResult);
05787
05788
if ((Fsr.
Data != (
SV |
XV | ROUND_TO_NEAREST)) ||
05789 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05790 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05791
goto TestFailed;
05792 }
05793
05794 Subtest += 1;
05795 DoubleOperand1.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05796 DoubleOperand1.HighPart =
MINUS_DOUBLE_INFINITY_VALUE;
05797 DoubleOperand2.LowPart = 0x0;
05798 DoubleOperand2.HighPart = 0x0;
05799 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05800 &DoubleOperand1,
05801 &DoubleOperand2,
05802 &DoubleResult);
05803
05804
if ((Fsr.
Data != (
SV |
XV | ROUND_TO_NEAREST)) ||
05805 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05806 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05807
goto TestFailed;
05808 }
05809
05810 Subtest += 1;
05811 DoubleOperand1.LowPart = 0x0;
05812 DoubleOperand1.HighPart = 0x0;
05813 DoubleOperand2.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05814 DoubleOperand2.HighPart =
MINUS_DOUBLE_INFINITY_VALUE;
05815 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05816 &DoubleOperand1,
05817 &DoubleOperand2,
05818 &DoubleResult);
05819
05820
if ((Fsr.
Data != (
SV |
XV | ROUND_TO_NEAREST)) ||
05821 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05822 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05823
goto TestFailed;
05824 }
05825
05826 Subtest += 1;
05827 DoubleOperand1.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05828 DoubleOperand1.HighPart = DOUBLE_INFINITY_VALUE_HIGH;
05829 DoubleOperand2.LowPart = 0x0;
05830 DoubleOperand2.HighPart = 0x0;
05831
Count = 0;
05832
try {
05833 Fsr.
Data =
MultiplyDouble(EV | ROUND_TO_NEAREST,
05834 &DoubleOperand1,
05835 &DoubleOperand2,
05836 &DoubleResult);
05837
05838 } except ((GetExceptionCode() == STATUS_FLOAT_INVALID_OPERATION) ?
05839 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
05840
Count += 1;
05841 }
05842
05843
if (
Count == 0) {
05844
goto TestFailed;
05845 }
05846
05847 Subtest += 1;
05848 DoubleOperand1.LowPart = 0x0;
05849 DoubleOperand1.HighPart = 0x0;
05850 DoubleOperand2.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05851 DoubleOperand2.HighPart = DOUBLE_INFINITY_VALUE_HIGH;
05852
Count = 0;
05853
try {
05854 Fsr.
Data =
MultiplyDouble(EV | ROUND_TO_NEAREST,
05855 &DoubleOperand1,
05856 &DoubleOperand2,
05857 &DoubleResult);
05858
05859 } except ((GetExceptionCode() == STATUS_FLOAT_INVALID_OPERATION) ?
05860 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
05861
Count += 1;
05862 }
05863
05864
if (
Count == 0) {
05865
goto TestFailed;
05866 }
05867
05868 Subtest += 1;
05869 DoubleOperand1.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05870 DoubleOperand1.HighPart =
MINUS_DOUBLE_INFINITY_VALUE;
05871 DoubleOperand2.LowPart = 0x0;
05872 DoubleOperand2.HighPart = 0x0;
05873
Count = 0;
05874
try {
05875 Fsr.
Data =
MultiplyDouble(EV | ROUND_TO_NEAREST,
05876 &DoubleOperand1,
05877 &DoubleOperand2,
05878 &DoubleResult);
05879
05880 } except ((GetExceptionCode() == STATUS_FLOAT_INVALID_OPERATION) ?
05881 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
05882
Count += 1;
05883 }
05884
05885
if (
Count == 0) {
05886
goto TestFailed;
05887 }
05888
05889 Subtest += 1;
05890 DoubleOperand1.LowPart = 0x0;
05891 DoubleOperand1.HighPart = 0x0;
05892 DoubleOperand2.LowPart = DOUBLE_INFINITY_VALUE_LOW;
05893 DoubleOperand2.HighPart =
MINUS_DOUBLE_INFINITY_VALUE;
05894
Count = 0;
05895
try {
05896 Fsr.
Data =
MultiplyDouble(EV | ROUND_TO_NEAREST,
05897 &DoubleOperand1,
05898 &DoubleOperand2,
05899 &DoubleResult);
05900
05901 } except ((GetExceptionCode() == STATUS_FLOAT_INVALID_OPERATION) ?
05902 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
05903
Count += 1;
05904 }
05905
05906
if (
Count == 0) {
05907
goto TestFailed;
05908 }
05909
05910 Subtest += 1;
05911 DoubleOperand1.LowPart = DOUBLE_NAN_LOW;
05912 DoubleOperand1.HighPart = DOUBLE_QUIET_NAN;
05913 DoubleOperand2.LowPart = DOUBLE_NAN_LOW;
05914 DoubleOperand2.HighPart = DOUBLE_QUIET_NAN;
05915 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05916 &DoubleOperand1,
05917 &DoubleOperand2,
05918 &DoubleResult);
05919
05920
if ((Fsr.
Data != (ROUND_TO_NEAREST)) ||
05921 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05922 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05923
goto TestFailed;
05924 }
05925
05926 Subtest += 1;
05927 DoubleOperand1.LowPart = DOUBLE_NAN_LOW;
05928 DoubleOperand1.HighPart = DOUBLE_QUIET_NAN;
05929 DoubleOperand2.LowPart = 0x0;
05930 DoubleOperand2.HighPart = 0x3ff00000;
05931 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05932 &DoubleOperand1,
05933 &DoubleOperand2,
05934 &DoubleResult);
05935
05936
if ((Fsr.
Data != (ROUND_TO_NEAREST)) ||
05937 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05938 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05939
goto TestFailed;
05940 }
05941
05942 Subtest += 1;
05943 DoubleOperand1.LowPart = 0x0;
05944 DoubleOperand1.HighPart = 0x3ff00000;
05945 DoubleOperand2.LowPart = DOUBLE_NAN_LOW;
05946 DoubleOperand2.HighPart = DOUBLE_QUIET_NAN;
05947 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05948 &DoubleOperand1,
05949 &DoubleOperand2,
05950 &DoubleResult);
05951
05952
if ((Fsr.
Data != (ROUND_TO_NEAREST)) ||
05953 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05954 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05955
goto TestFailed;
05956 }
05957
05958 Subtest += 1;
05959 DoubleOperand1.LowPart = DOUBLE_NAN_LOW;
05960 DoubleOperand1.HighPart = DOUBLE_SIGNAL_NAN;
05961 DoubleOperand2.LowPart = DOUBLE_NAN_LOW;
05962 DoubleOperand2.HighPart = DOUBLE_SIGNAL_NAN;
05963 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05964 &DoubleOperand1,
05965 &DoubleOperand2,
05966 &DoubleResult);
05967
05968
if ((Fsr.
Data != (
SV |
XV | ROUND_TO_NEAREST)) ||
05969 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05970 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05971
goto TestFailed;
05972 }
05973
05974 Subtest += 1;
05975 DoubleOperand1.LowPart = DOUBLE_NAN_LOW;
05976 DoubleOperand1.HighPart = DOUBLE_SIGNAL_NAN;
05977 DoubleOperand2.LowPart = 0x0;
05978 DoubleOperand2.HighPart = 0x3ff00000;
05979 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05980 &DoubleOperand1,
05981 &DoubleOperand2,
05982 &DoubleResult);
05983
05984
if ((Fsr.
Data != (
SV |
XV | ROUND_TO_NEAREST)) ||
05985 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
05986 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
05987
goto TestFailed;
05988 }
05989
05990 Subtest += 1;
05991 DoubleOperand1.LowPart = 0x0;
05992 DoubleOperand1.HighPart = 0x3ff00000;
05993 DoubleOperand2.LowPart = DOUBLE_NAN_LOW;
05994 DoubleOperand2.HighPart = DOUBLE_SIGNAL_NAN;
05995 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
05996 &DoubleOperand1,
05997 &DoubleOperand2,
05998 &DoubleResult);
05999
06000
if ((Fsr.
Data != (
SV |
XV | ROUND_TO_NEAREST)) ||
06001 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
06002 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
06003
goto TestFailed;
06004 }
06005
06006 Subtest += 1;
06007 DoubleOperand1.LowPart = DOUBLE_NAN_LOW;
06008 DoubleOperand1.HighPart = DOUBLE_QUIET_NAN;
06009 DoubleOperand2.LowPart = DOUBLE_NAN_LOW;
06010 DoubleOperand2.HighPart = DOUBLE_QUIET_NAN;
06011
try {
06012 Fsr.
Data =
MultiplyDouble(EV | ROUND_TO_NEAREST,
06013 &DoubleOperand1,
06014 &DoubleOperand2,
06015 &DoubleResult);
06016
06017 } except (EXCEPTION_EXECUTE_HANDLER) {
06018
goto TestFailed;
06019 }
06020
06021
if ((Fsr.
Data != (
EV | ROUND_TO_NEAREST)) ||
06022 (DoubleResult.LowPart != DOUBLE_NAN_LOW) ||
06023 (DoubleResult.HighPart != DOUBLE_QUIET_NAN)) {
06024
goto TestFailed;
06025 }
06026
06027 Subtest += 1;
06028 DoubleOperand1.LowPart = DOUBLE_NAN_LOW;
06029 DoubleOperand1.HighPart = DOUBLE_QUIET_NAN;
06030 DoubleOperand2.LowPart = DOUBLE_NAN_LOW;
06031 DoubleOperand2.HighPart = DOUBLE_SIGNAL_NAN;
06032
Count = 0;
06033
try {
06034 Fsr.
Data =
MultiplyDouble(EV | ROUND_TO_NEAREST,
06035 &DoubleOperand1,
06036 &DoubleOperand2,
06037 &DoubleResult);
06038
06039 } except ((GetExceptionCode() == STATUS_FLOAT_INVALID_OPERATION) ?
06040 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06041
Count += 1;
06042 }
06043
06044
if (
Count != 1) {
06045
goto TestFailed;
06046 }
06047
06048 Subtest += 1;
06049 DoubleOperand1.LowPart = DOUBLE_NAN_LOW;
06050 DoubleOperand1.HighPart = DOUBLE_SIGNAL_NAN;
06051 DoubleOperand2.LowPart = DOUBLE_NAN_LOW;
06052 DoubleOperand2.HighPart = DOUBLE_QUIET_NAN;
06053
Count = 0;
06054
try {
06055 Fsr.
Data =
MultiplyDouble(EV | ROUND_TO_NEAREST,
06056 &DoubleOperand1,
06057 &DoubleOperand2,
06058 &DoubleResult);
06059
06060 } except ((GetExceptionCode() == STATUS_FLOAT_INVALID_OPERATION) ?
06061 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06062
Count += 1;
06063 }
06064
06065
if (
Count != 1) {
06066
goto TestFailed;
06067 }
06068
06069 Subtest += 1;
06070 DoubleOperand1.LowPart = 0x0;
06071 DoubleOperand1.HighPart = 0x7fe00000;
06072 DoubleOperand2.LowPart = 0x0;
06073 DoubleOperand2.HighPart = 0x80000;
06074 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06075 &DoubleOperand1,
06076 &DoubleOperand2,
06077 &DoubleResult);
06078
06079
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
06080 (DoubleResult.LowPart != 0x0) ||
06081 (DoubleResult.HighPart != 0x3ff00000)) {
06082
goto TestFailed;
06083 }
06084
06085 Subtest += 1;
06086 DoubleOperand1.LowPart = 0x0;
06087 DoubleOperand1.HighPart = 0x80000;
06088 DoubleOperand2.LowPart = 0x0;
06089 DoubleOperand2.HighPart = 0x7fe00000;
06090 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06091 &DoubleOperand1,
06092 &DoubleOperand2,
06093 &DoubleResult);
06094
06095
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
06096 (DoubleResult.LowPart != 0x0) ||
06097 (DoubleResult.HighPart != 0x3ff00000)) {
06098
goto TestFailed;
06099 }
06100
06101 Subtest += 1;
06102 DoubleOperand1.LowPart = 0x0;
06103 DoubleOperand1.HighPart = 0x7fe00000;
06104 DoubleOperand2.LowPart = 0x0;
06105 DoubleOperand2.HighPart =
SIGN | 0x80000;
06106 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06107 &DoubleOperand1,
06108 &DoubleOperand2,
06109 &DoubleResult);
06110
06111
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
06112 (DoubleResult.LowPart != 0x0) ||
06113 (DoubleResult.HighPart != (
SIGN | 0x3ff00000))) {
06114
goto TestFailed;
06115 }
06116
06117 Subtest += 1;
06118 DoubleOperand1.LowPart = 0x0;
06119 DoubleOperand1.HighPart = 0x80000;
06120 DoubleOperand2.LowPart = 0x0;
06121 DoubleOperand2.HighPart =
SIGN | 0x7fe00000;
06122 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06123 &DoubleOperand1,
06124 &DoubleOperand2,
06125 &DoubleResult);
06126
06127
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
06128 (DoubleResult.LowPart != 0x0) ||
06129 (DoubleResult.HighPart != (
SIGN | 0x3ff00000))) {
06130
goto TestFailed;
06131 }
06132
06133 Subtest += 1;
06134 DoubleOperand1.LowPart = 0x0;
06135 DoubleOperand1.HighPart = 0x80008;
06136 DoubleOperand2.LowPart = 0x0;
06137 DoubleOperand2.HighPart = 0x7fe00001;
06138 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06139 &DoubleOperand1,
06140 &DoubleOperand2,
06141 &DoubleResult);
06142
06143
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
06144 (DoubleResult.LowPart != 0x10000) ||
06145 (DoubleResult.HighPart != 0x3ff00011)) {
06146
goto TestFailed;
06147 }
06148
06149 Subtest += 1;
06150 DoubleOperand1.LowPart = 0x0;
06151 DoubleOperand1.HighPart = 0x80008;
06152 DoubleOperand2.LowPart = 0x0;
06153 DoubleOperand2.HighPart =
SIGN | 0x7fe00001;
06154 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06155 &DoubleOperand1,
06156 &DoubleOperand2,
06157 &DoubleResult);
06158
06159
if ((Fsr.
Data != ROUND_TO_NEAREST) ||
06160 (DoubleResult.LowPart != 0x10000) ||
06161 (DoubleResult.HighPart != (
SIGN | 0x3ff00011))) {
06162
goto TestFailed;
06163 }
06164
06165 Subtest += 1;
06166 DoubleOperand1.LowPart = 0x0;
06167 DoubleOperand1.HighPart = 0x80008;
06168 DoubleOperand2.LowPart = 0x1;
06169 DoubleOperand2.HighPart = 0x7fe00001;
06170
Count = 0;
06171
try {
06172 Fsr.
Data =
MultiplyDouble(EI | ROUND_TO_NEAREST,
06173 &DoubleOperand1,
06174 &DoubleOperand2,
06175 &DoubleResult);
06176
06177 } except ((GetExceptionCode() == STATUS_FLOAT_INEXACT_RESULT) ?
06178 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06179
Count += 1;
06180 }
06181
06182
if (
Count != 1) {
06183
goto TestFailed;
06184 }
06185
06186 Subtest += 1;
06187 DoubleOperand1.LowPart = 0x0;
06188 DoubleOperand1.HighPart = 0x80008;
06189 DoubleOperand2.LowPart = 0x1;
06190 DoubleOperand2.HighPart =
SIGN | 0x7fe00001;
06191
Count = 0;
06192
try {
06193 Fsr.
Data =
MultiplyDouble(EI | ROUND_TO_NEAREST,
06194 &DoubleOperand1,
06195 &DoubleOperand2,
06196 &DoubleResult);
06197
06198 } except ((GetExceptionCode() == STATUS_FLOAT_INEXACT_RESULT) ?
06199 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06200
Count += 1;
06201 }
06202
06203
if (
Count != 1) {
06204
goto TestFailed;
06205 }
06206
06207 Subtest += 1;
06208 DoubleOperand1.LowPart = 0x0;
06209 DoubleOperand1.HighPart = 0x80000;
06210 DoubleOperand2.LowPart = 0x0;
06211 DoubleOperand2.HighPart = 0x80000;
06212 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06213 &DoubleOperand1,
06214 &DoubleOperand2,
06215 &DoubleResult);
06216
06217
if ((Fsr.
Data != (
SU |
SI | ROUND_TO_NEAREST)) ||
06218 (DoubleResult.LowPart != 0x0) ||
06219 (DoubleResult.HighPart != 0x0)) {
06220
goto TestFailed;
06221 }
06222
06223 Subtest += 1;
06224 DoubleOperand1.LowPart = 0x0;
06225 DoubleOperand1.HighPart = 0x80000;
06226 DoubleOperand2.LowPart = 0x0;
06227 DoubleOperand2.HighPart =
SIGN | 0x80000;
06228 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06229 &DoubleOperand1,
06230 &DoubleOperand2,
06231 &DoubleResult);
06232
06233
if ((Fsr.
Data != (
SU |
SI | ROUND_TO_NEAREST)) ||
06234 (DoubleResult.LowPart != 0x0) ||
06235 (DoubleResult.HighPart != (
SIGN | 0x0))) {
06236
goto TestFailed;
06237 }
06238
06239 Subtest += 1;
06240 DoubleOperand1.LowPart = 0x0;
06241 DoubleOperand1.HighPart = 0x80000;
06242 DoubleOperand2.LowPart = 0x0;
06243 DoubleOperand2.HighPart = 0x80000;
06244
Count = 0;
06245
try {
06246 Fsr.
Data =
MultiplyDouble(EI | ROUND_TO_NEAREST,
06247 &DoubleOperand1,
06248 &DoubleOperand2,
06249 &DoubleResult);
06250
06251 } except ((GetExceptionCode() == STATUS_FLOAT_INEXACT_RESULT) ?
06252 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06253
Count += 1;
06254 }
06255
06256
if (
Count != 1) {
06257
goto TestFailed;
06258 }
06259
06260 Subtest += 1;
06261 DoubleOperand1.LowPart = 0x0;
06262 DoubleOperand1.HighPart = 0x80000;
06263 DoubleOperand2.LowPart = 0x0;
06264 DoubleOperand2.HighPart =
SIGN | 0x80000;
06265
Count = 0;
06266
try {
06267 Fsr.
Data =
MultiplyDouble(EI | ROUND_TO_NEAREST,
06268 &DoubleOperand1,
06269 &DoubleOperand2,
06270 &DoubleResult);
06271
06272 } except ((GetExceptionCode() == STATUS_FLOAT_INEXACT_RESULT) ?
06273 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06274
Count += 1;
06275 }
06276
06277
if (
Count != 1) {
06278
goto TestFailed;
06279 }
06280
06281 Subtest += 1;
06282 DoubleOperand1.LowPart = 0x0;
06283 DoubleOperand1.HighPart = 0x80000;
06284 DoubleOperand2.LowPart = 0x0;
06285 DoubleOperand2.HighPart = 0x80000;
06286
Count = 0;
06287
try {
06288 Fsr.
Data =
MultiplyDouble(EU | ROUND_TO_NEAREST,
06289 &DoubleOperand1,
06290 &DoubleOperand2,
06291 &DoubleResult);
06292
06293 } except ((GetExceptionCode() == STATUS_FLOAT_UNDERFLOW) ?
06294 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06295
Count += 1;
06296 }
06297
06298
if (
Count != 1) {
06299
goto TestFailed;
06300 }
06301
06302 Subtest += 1;
06303 DoubleOperand1.LowPart = 0x0;
06304 DoubleOperand1.HighPart = 0x80000;
06305 DoubleOperand2.LowPart = 0x0;
06306 DoubleOperand2.HighPart =
SIGN | 0x80000;
06307
Count = 0;
06308
try {
06309 Fsr.
Data =
MultiplyDouble(EU | ROUND_TO_NEAREST,
06310 &DoubleOperand1,
06311 &DoubleOperand2,
06312 &DoubleResult);
06313
06314 } except ((GetExceptionCode() == STATUS_FLOAT_UNDERFLOW) ?
06315 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06316
Count += 1;
06317 }
06318
06319
if (
Count != 1) {
06320
goto TestFailed;
06321 }
06322
06323 Subtest += 1;
06324 DoubleOperand1.LowPart = 0x0;
06325 DoubleOperand1.HighPart = 0x80000;
06326 DoubleOperand2.LowPart = 0x0;
06327 DoubleOperand2.HighPart = 0x80000;
06328
Count = 0;
06329
try {
06330 Fsr.
Data =
MultiplyDouble(EU | EI | ROUND_TO_NEAREST,
06331 &DoubleOperand1,
06332 &DoubleOperand2,
06333 &DoubleResult);
06334
06335 } except ((GetExceptionCode() == STATUS_FLOAT_UNDERFLOW) ?
06336 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06337
Count += 1;
06338 }
06339
06340
if (
Count != 1) {
06341
goto TestFailed;
06342 }
06343
06344 Subtest += 1;
06345 DoubleOperand1.LowPart = 0x0;
06346 DoubleOperand1.HighPart = 0x80000;
06347 DoubleOperand2.LowPart = 0x0;
06348 DoubleOperand2.HighPart =
SIGN | 0x80000;
06349
Count = 0;
06350
try {
06351 Fsr.
Data =
MultiplyDouble(EU | EI | ROUND_TO_NEAREST,
06352 &DoubleOperand1,
06353 &DoubleOperand2,
06354 &DoubleResult);
06355
06356 } except ((GetExceptionCode() == STATUS_FLOAT_UNDERFLOW) ?
06357 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06358
Count += 1;
06359 }
06360
06361
if (
Count != 1) {
06362
goto TestFailed;
06363 }
06364
06365 Subtest += 1;
06366 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06367 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06368 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06369 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06370 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06371 &DoubleOperand1,
06372 &DoubleOperand2,
06373 &DoubleResult);
06374
06375
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_NEAREST)) ||
06376 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
06377 (DoubleResult.HighPart != DOUBLE_INFINITY_VALUE_HIGH)) {
06378
goto TestFailed;
06379 }
06380
06381 Subtest += 1;
06382 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06383 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06384 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06385 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06386 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06387 &DoubleOperand1,
06388 &DoubleOperand2,
06389 &DoubleResult);
06390
06391
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_NEAREST)) ||
06392 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
06393 (DoubleResult.HighPart !=
MINUS_DOUBLE_INFINITY_VALUE)) {
06394
goto TestFailed;
06395 }
06396
06397 Subtest += 1;
06398 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06399 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06400 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06401 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06402 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06403 &DoubleOperand1,
06404 &DoubleOperand2,
06405 &DoubleResult);
06406
06407
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_NEAREST)) ||
06408 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
06409 (DoubleResult.HighPart !=
MINUS_DOUBLE_INFINITY_VALUE)) {
06410
goto TestFailed;
06411 }
06412
06413 Subtest += 1;
06414 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06415 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06416 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06417 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06418 Fsr.
Data =
MultiplyDouble(ROUND_TO_NEAREST,
06419 &DoubleOperand1,
06420 &DoubleOperand2,
06421 &DoubleResult);
06422
06423
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_NEAREST)) ||
06424 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
06425 (DoubleResult.HighPart != DOUBLE_INFINITY_VALUE_HIGH)) {
06426
goto TestFailed;
06427 }
06428
06429 Subtest += 1;
06430 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06431 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06432 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06433 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06434 Fsr.
Data =
MultiplyDouble(ROUND_TO_ZERO,
06435 &DoubleOperand1,
06436 &DoubleOperand2,
06437 &DoubleResult);
06438
06439
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_ZERO)) ||
06440 (DoubleResult.LowPart != DOUBLE_MAXIMUM_VALUE_LOW) ||
06441 (DoubleResult.HighPart != DOUBLE_MAXIMUM_VALUE_HIGH)) {
06442
goto TestFailed;
06443 }
06444
06445 Subtest += 1;
06446 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06447 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06448 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06449 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06450 Fsr.
Data =
MultiplyDouble(ROUND_TO_ZERO,
06451 &DoubleOperand1,
06452 &DoubleOperand2,
06453 &DoubleResult);
06454
06455
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_ZERO)) ||
06456 (DoubleResult.LowPart != DOUBLE_MAXIMUM_VALUE_LOW) ||
06457 (DoubleResult.HighPart != (
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH))) {
06458
goto TestFailed;
06459 }
06460
06461 Subtest += 1;
06462 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06463 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06464 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06465 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06466 Fsr.
Data =
MultiplyDouble(ROUND_TO_ZERO,
06467 &DoubleOperand1,
06468 &DoubleOperand2,
06469 &DoubleResult);
06470
06471
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_ZERO)) ||
06472 (DoubleResult.LowPart != DOUBLE_MAXIMUM_VALUE_LOW) ||
06473 (DoubleResult.HighPart != (
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH))) {
06474
goto TestFailed;
06475 }
06476
06477 Subtest += 1;
06478 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06479 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06480 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06481 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06482 Fsr.
Data =
MultiplyDouble(ROUND_TO_ZERO,
06483 &DoubleOperand1,
06484 &DoubleOperand2,
06485 &DoubleResult);
06486
06487
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_ZERO)) ||
06488 (DoubleResult.LowPart != DOUBLE_MAXIMUM_VALUE_LOW) ||
06489 (DoubleResult.HighPart != DOUBLE_MAXIMUM_VALUE_HIGH)) {
06490
goto TestFailed;
06491 }
06492
06493 Subtest += 1;
06494 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06495 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06496 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06497 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06498 Fsr.
Data =
MultiplyDouble(ROUND_TO_PLUS_INFINITY,
06499 &DoubleOperand1,
06500 &DoubleOperand2,
06501 &DoubleResult);
06502
06503
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_PLUS_INFINITY)) ||
06504 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
06505 (DoubleResult.HighPart != DOUBLE_INFINITY_VALUE_HIGH)) {
06506
goto TestFailed;
06507 }
06508
06509 Subtest += 1;
06510 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06511 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06512 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06513 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06514 Fsr.
Data =
MultiplyDouble(ROUND_TO_PLUS_INFINITY,
06515 &DoubleOperand1,
06516 &DoubleOperand2,
06517 &DoubleResult);
06518
06519
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_PLUS_INFINITY)) ||
06520 (DoubleResult.LowPart != DOUBLE_MAXIMUM_VALUE_LOW) ||
06521 (DoubleResult.HighPart != (
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH))) {
06522
goto TestFailed;
06523 }
06524
06525 Subtest += 1;
06526 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06527 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06528 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06529 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06530 Fsr.
Data =
MultiplyDouble(ROUND_TO_PLUS_INFINITY,
06531 &DoubleOperand1,
06532 &DoubleOperand2,
06533 &DoubleResult);
06534
06535
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_PLUS_INFINITY)) ||
06536 (DoubleResult.LowPart != DOUBLE_MAXIMUM_VALUE_LOW) ||
06537 (DoubleResult.HighPart != (
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH))) {
06538
goto TestFailed;
06539 }
06540
06541 Subtest += 1;
06542 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06543 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06544 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06545 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06546 Fsr.
Data =
MultiplyDouble(ROUND_TO_PLUS_INFINITY,
06547 &DoubleOperand1,
06548 &DoubleOperand2,
06549 &DoubleResult);
06550
06551
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_PLUS_INFINITY)) ||
06552 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
06553 (DoubleResult.HighPart != DOUBLE_INFINITY_VALUE_HIGH)) {
06554
goto TestFailed;
06555 }
06556
06557 Subtest += 1;
06558 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06559 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06560 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06561 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06562 Fsr.
Data =
MultiplyDouble(ROUND_TO_MINUS_INFINITY,
06563 &DoubleOperand1,
06564 &DoubleOperand2,
06565 &DoubleResult);
06566
06567
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_MINUS_INFINITY)) ||
06568 (DoubleResult.LowPart != DOUBLE_MAXIMUM_VALUE_LOW) ||
06569 (DoubleResult.HighPart != DOUBLE_MAXIMUM_VALUE_HIGH)) {
06570
goto TestFailed;
06571 }
06572
06573 Subtest += 1;
06574 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06575 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06576 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06577 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06578 Fsr.
Data =
MultiplyDouble(ROUND_TO_MINUS_INFINITY,
06579 &DoubleOperand1,
06580 &DoubleOperand2,
06581 &DoubleResult);
06582
06583
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_MINUS_INFINITY)) ||
06584 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
06585 (DoubleResult.HighPart !=
MINUS_DOUBLE_INFINITY_VALUE)) {
06586
goto TestFailed;
06587 }
06588
06589 Subtest += 1;
06590 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06591 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06592 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06593 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06594 Fsr.
Data =
MultiplyDouble(ROUND_TO_MINUS_INFINITY,
06595 &DoubleOperand1,
06596 &DoubleOperand2,
06597 &DoubleResult);
06598
06599
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_MINUS_INFINITY)) ||
06600 (DoubleResult.LowPart != DOUBLE_INFINITY_VALUE_LOW) ||
06601 (DoubleResult.HighPart !=
MINUS_DOUBLE_INFINITY_VALUE)) {
06602
goto TestFailed;
06603 }
06604
06605 Subtest += 1;
06606 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06607 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06608 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06609 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06610 Fsr.
Data =
MultiplyDouble(ROUND_TO_MINUS_INFINITY,
06611 &DoubleOperand1,
06612 &DoubleOperand2,
06613 &DoubleResult);
06614
06615
if ((Fsr.
Data != (
SO |
SI |
XO |
XI | ROUND_TO_MINUS_INFINITY)) ||
06616 (DoubleResult.LowPart != DOUBLE_MAXIMUM_VALUE_LOW) ||
06617 (DoubleResult.HighPart != DOUBLE_MAXIMUM_VALUE_HIGH)) {
06618
goto TestFailed;
06619 }
06620
06621 Subtest += 1;
06622 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06623 DoubleOperand1.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06624 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06625 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06626
Count = 0;
06627
try {
06628 Fsr.
Data =
MultiplyDouble(EI | ROUND_TO_NEAREST,
06629 &DoubleOperand1,
06630 &DoubleOperand2,
06631 &DoubleResult);
06632
06633 } except ((GetExceptionCode() == STATUS_FLOAT_INEXACT_RESULT) ?
06634 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06635
Count += 1;
06636 }
06637
06638
if (
Count != 1) {
06639
goto TestFailed;
06640 }
06641
06642 Subtest += 1;
06643 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06644 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06645 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06646 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06647
Count = 0;
06648
try {
06649 Fsr.
Data =
MultiplyDouble(EI | ROUND_TO_NEAREST,
06650 &DoubleOperand1,
06651 &DoubleOperand2,
06652 &DoubleResult);
06653
06654 } except ((GetExceptionCode() == STATUS_FLOAT_INEXACT_RESULT) ?
06655 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06656
Count += 1;
06657 }
06658
06659
if (
Count != 1) {
06660
goto TestFailed;
06661 }
06662
06663 Subtest += 1;
06664 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06665 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06666 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06667 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06668
Count = 0;
06669
try {
06670 Fsr.
Data =
MultiplyDouble(EO | ROUND_TO_NEAREST,
06671 &DoubleOperand1,
06672 &DoubleOperand2,
06673 &DoubleResult);
06674
06675 } except ((GetExceptionCode() == STATUS_FLOAT_OVERFLOW) ?
06676 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06677
Count += 1;
06678 }
06679
06680
if (
Count != 1) {
06681
goto TestFailed;
06682 }
06683
06684 Subtest += 1;
06685 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06686 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06687 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06688 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06689
Count = 0;
06690
try {
06691 Fsr.
Data =
MultiplyDouble(EO | ROUND_TO_NEAREST,
06692 &DoubleOperand1,
06693 &DoubleOperand2,
06694 &DoubleResult);
06695
06696 } except ((GetExceptionCode() == STATUS_FLOAT_OVERFLOW) ?
06697 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06698
Count += 1;
06699 }
06700
06701
if (
Count != 1) {
06702
goto TestFailed;
06703 }
06704
06705 Subtest += 1;
06706 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06707 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06708 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06709 DoubleOperand2.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06710
Count = 0;
06711
try {
06712 Fsr.
Data =
MultiplyDouble(EO | EI | ROUND_TO_NEAREST,
06713 &DoubleOperand1,
06714 &DoubleOperand2,
06715 &DoubleResult);
06716
06717 } except ((GetExceptionCode() == STATUS_FLOAT_OVERFLOW) ?
06718 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06719
Count += 1;
06720 }
06721
06722
if (
Count != 1) {
06723
goto TestFailed;
06724 }
06725
06726 Subtest += 1;
06727 DoubleOperand1.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06728 DoubleOperand1.HighPart = DOUBLE_MAXIMUM_VALUE_HIGH;
06729 DoubleOperand2.LowPart = DOUBLE_MAXIMUM_VALUE_LOW;
06730 DoubleOperand2.HighPart =
SIGN | DOUBLE_MAXIMUM_VALUE_HIGH;
06731
Count = 0;
06732
try {
06733 Fsr.
Data =
MultiplyDouble(EO | EI | ROUND_TO_NEAREST,
06734 &DoubleOperand1,
06735 &DoubleOperand2,
06736 &DoubleResult);
06737
06738 } except ((GetExceptionCode() == STATUS_FLOAT_OVERFLOW) ?
06739 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
06740
Count += 1;
06741 }
06742
06743
if (
Count != 1) {
06744
goto TestFailed;
06745 }
06746
06747
06748
06749
06750
06751 printf(
"succeeded\n");
06752
return;
06753
06754
06755
06756
06757
06758 TestFailed:
06759 printf(
" subtest %d failed, fsr = %lx, result = %lx, %lx\n",
06760 Subtest,
06761 Fsr.
Data,
06762 DoubleResult.LowPart,
06763 DoubleResult.HighPart);
06764
06765
return;
06766 }