Normalized llvm frem (C fmod). */
| 1924 | |
| 1925 | /* Normalized llvm frem (C fmod). */ |
| 1926 | IEEEFloat::opStatus IEEEFloat::mod(const IEEEFloat &rhs) { |
| 1927 | opStatus fs; |
| 1928 | fs = modSpecials(rhs); |
| 1929 | unsigned int origSign = sign; |
| 1930 | |
| 1931 | while (isFiniteNonZero() && rhs.isFiniteNonZero() && |
| 1932 | compareAbsoluteValue(rhs) != cmpLessThan) { |
| 1933 | IEEEFloat V = scalbn(rhs, ilogb(*this) - ilogb(rhs), rmNearestTiesToEven); |
| 1934 | if (compareAbsoluteValue(V) == cmpLessThan) |
| 1935 | V = scalbn(V, -1, rmNearestTiesToEven); |
| 1936 | V.sign = sign; |
| 1937 | |
| 1938 | fs = subtract(V, rmNearestTiesToEven); |
| 1939 | assert(fs==opOK); |
| 1940 | } |
| 1941 | if (isZero()) |
| 1942 | sign = origSign; // fmod requires this |
| 1943 | return fs; |
| 1944 | } |
| 1945 | |
| 1946 | /* Normalized fused-multiply-add. */ |
| 1947 | IEEEFloat::opStatus IEEEFloat::fusedMultiplyAdd(const IEEEFloat &multiplicand, |
nothing calls this directly
no test coverage detected