Fix a couple bugs testing NaNs. Add an exclusion list for LLVM min/max.

This commit is contained in:
Nick Lewycky 2019-08-05 15:38:03 -07:00
parent 43ae30985c
commit 1d54a938f6
2 changed files with 562 additions and 16 deletions

View File

@ -19,6 +19,554 @@ clif:skip:simd_binaryen.wast:* # SIMD not implemented
# clif:skip:skip-stack-guard-page.wast:2 # Slow test
# LLVM bug with min/max over NaNs
llvm:skip:f32.wast:1651
llvm:skip:f32.wast:1652
llvm:skip:f32.wast:1653
llvm:skip:f32.wast:1654
llvm:skip:f32.wast:1655
llvm:skip:f32.wast:1656
llvm:skip:f32.wast:1657
llvm:skip:f32.wast:1658
llvm:skip:f32.wast:1691
llvm:skip:f32.wast:1692
llvm:skip:f32.wast:1693
llvm:skip:f32.wast:1694
llvm:skip:f32.wast:1695
llvm:skip:f32.wast:1696
llvm:skip:f32.wast:1697
llvm:skip:f32.wast:1698
llvm:skip:f32.wast:1731
llvm:skip:f32.wast:1732
llvm:skip:f32.wast:1733
llvm:skip:f32.wast:1734
llvm:skip:f32.wast:1735
llvm:skip:f32.wast:1736
llvm:skip:f32.wast:1737
llvm:skip:f32.wast:1738
llvm:skip:f32.wast:1771
llvm:skip:f32.wast:1772
llvm:skip:f32.wast:1773
llvm:skip:f32.wast:1774
llvm:skip:f32.wast:1775
llvm:skip:f32.wast:1776
llvm:skip:f32.wast:1777
llvm:skip:f32.wast:1778
llvm:skip:f32.wast:1811
llvm:skip:f32.wast:1812
llvm:skip:f32.wast:1813
llvm:skip:f32.wast:1814
llvm:skip:f32.wast:1815
llvm:skip:f32.wast:1816
llvm:skip:f32.wast:1817
llvm:skip:f32.wast:1818
llvm:skip:f32.wast:1851
llvm:skip:f32.wast:1852
llvm:skip:f32.wast:1853
llvm:skip:f32.wast:1854
llvm:skip:f32.wast:1855
llvm:skip:f32.wast:1856
llvm:skip:f32.wast:1857
llvm:skip:f32.wast:1858
llvm:skip:f32.wast:1891
llvm:skip:f32.wast:1892
llvm:skip:f32.wast:1893
llvm:skip:f32.wast:1894
llvm:skip:f32.wast:1895
llvm:skip:f32.wast:1896
llvm:skip:f32.wast:1897
llvm:skip:f32.wast:1898
llvm:skip:f32.wast:1931
llvm:skip:f32.wast:1932
llvm:skip:f32.wast:1933
llvm:skip:f32.wast:1934
llvm:skip:f32.wast:1935
llvm:skip:f32.wast:1936
llvm:skip:f32.wast:1937
llvm:skip:f32.wast:1938
llvm:skip:f32.wast:1939
llvm:skip:f32.wast:1940
llvm:skip:f32.wast:1941
llvm:skip:f32.wast:1942
llvm:skip:f32.wast:1943
llvm:skip:f32.wast:1944
llvm:skip:f32.wast:1945
llvm:skip:f32.wast:1946
llvm:skip:f32.wast:1947
llvm:skip:f32.wast:1948
llvm:skip:f32.wast:1949
llvm:skip:f32.wast:1950
llvm:skip:f32.wast:1951
llvm:skip:f32.wast:1952
llvm:skip:f32.wast:1953
llvm:skip:f32.wast:1954
llvm:skip:f32.wast:1955
llvm:skip:f32.wast:1956
llvm:skip:f32.wast:1957
llvm:skip:f32.wast:1958
llvm:skip:f32.wast:1959
llvm:skip:f32.wast:1960
llvm:skip:f32.wast:1961
llvm:skip:f32.wast:1962
llvm:skip:f32.wast:1963
llvm:skip:f32.wast:1964
llvm:skip:f32.wast:1965
llvm:skip:f32.wast:1966
llvm:skip:f32.wast:1967
llvm:skip:f32.wast:1968
llvm:skip:f32.wast:1969
llvm:skip:f32.wast:1970
llvm:skip:f32.wast:1971
llvm:skip:f32.wast:1972
llvm:skip:f32.wast:1973
llvm:skip:f32.wast:1974
llvm:skip:f32.wast:1975
llvm:skip:f32.wast:1976
llvm:skip:f32.wast:1977
llvm:skip:f32.wast:1978
llvm:skip:f32.wast:1979
llvm:skip:f32.wast:1980
llvm:skip:f32.wast:1981
llvm:skip:f32.wast:1982
llvm:skip:f32.wast:1983
llvm:skip:f32.wast:1984
llvm:skip:f32.wast:1985
llvm:skip:f32.wast:1986
llvm:skip:f32.wast:1987
llvm:skip:f32.wast:1988
llvm:skip:f32.wast:1989
llvm:skip:f32.wast:1990
llvm:skip:f32.wast:1991
llvm:skip:f32.wast:1992
llvm:skip:f32.wast:1993
llvm:skip:f32.wast:1994
llvm:skip:f32.wast:1995
llvm:skip:f32.wast:1996
llvm:skip:f32.wast:1997
llvm:skip:f32.wast:1998
llvm:skip:f32.wast:1999
llvm:skip:f32.wast:2000
llvm:skip:f32.wast:2001
llvm:skip:f32.wast:2002
llvm:skip:f32.wast:2005
llvm:skip:f32.wast:2006
llvm:skip:f32.wast:2009
llvm:skip:f32.wast:2010
llvm:skip:f32.wast:2013
llvm:skip:f32.wast:2014
llvm:skip:f32.wast:2017
llvm:skip:f32.wast:2018
llvm:skip:f32.wast:2051
llvm:skip:f32.wast:2052
llvm:skip:f32.wast:2053
llvm:skip:f32.wast:2054
llvm:skip:f32.wast:2055
llvm:skip:f32.wast:2056
llvm:skip:f32.wast:2057
llvm:skip:f32.wast:2058
llvm:skip:f32.wast:2091
llvm:skip:f32.wast:2092
llvm:skip:f32.wast:2093
llvm:skip:f32.wast:2094
llvm:skip:f32.wast:2095
llvm:skip:f32.wast:2096
llvm:skip:f32.wast:2097
llvm:skip:f32.wast:2098
llvm:skip:f32.wast:2131
llvm:skip:f32.wast:2132
llvm:skip:f32.wast:2133
llvm:skip:f32.wast:2134
llvm:skip:f32.wast:2135
llvm:skip:f32.wast:2136
llvm:skip:f32.wast:2137
llvm:skip:f32.wast:2138
llvm:skip:f32.wast:2171
llvm:skip:f32.wast:2172
llvm:skip:f32.wast:2173
llvm:skip:f32.wast:2174
llvm:skip:f32.wast:2175
llvm:skip:f32.wast:2176
llvm:skip:f32.wast:2177
llvm:skip:f32.wast:2178
llvm:skip:f32.wast:2211
llvm:skip:f32.wast:2212
llvm:skip:f32.wast:2213
llvm:skip:f32.wast:2214
llvm:skip:f32.wast:2215
llvm:skip:f32.wast:2216
llvm:skip:f32.wast:2217
llvm:skip:f32.wast:2218
llvm:skip:f32.wast:2251
llvm:skip:f32.wast:2252
llvm:skip:f32.wast:2253
llvm:skip:f32.wast:2254
llvm:skip:f32.wast:2255
llvm:skip:f32.wast:2256
llvm:skip:f32.wast:2257
llvm:skip:f32.wast:2258
llvm:skip:f32.wast:2291
llvm:skip:f32.wast:2292
llvm:skip:f32.wast:2293
llvm:skip:f32.wast:2294
llvm:skip:f32.wast:2295
llvm:skip:f32.wast:2296
llvm:skip:f32.wast:2297
llvm:skip:f32.wast:2298
llvm:skip:f32.wast:2331
llvm:skip:f32.wast:2332
llvm:skip:f32.wast:2333
llvm:skip:f32.wast:2334
llvm:skip:f32.wast:2335
llvm:skip:f32.wast:2336
llvm:skip:f32.wast:2337
llvm:skip:f32.wast:2338
llvm:skip:f32.wast:2339
llvm:skip:f32.wast:2340
llvm:skip:f32.wast:2341
llvm:skip:f32.wast:2342
llvm:skip:f32.wast:2343
llvm:skip:f32.wast:2344
llvm:skip:f32.wast:2345
llvm:skip:f32.wast:2346
llvm:skip:f32.wast:2347
llvm:skip:f32.wast:2348
llvm:skip:f32.wast:2349
llvm:skip:f32.wast:2350
llvm:skip:f32.wast:2351
llvm:skip:f32.wast:2352
llvm:skip:f32.wast:2353
llvm:skip:f32.wast:2354
llvm:skip:f32.wast:2355
llvm:skip:f32.wast:2356
llvm:skip:f32.wast:2357
llvm:skip:f32.wast:2358
llvm:skip:f32.wast:2359
llvm:skip:f32.wast:2360
llvm:skip:f32.wast:2361
llvm:skip:f32.wast:2362
llvm:skip:f32.wast:2363
llvm:skip:f32.wast:2364
llvm:skip:f32.wast:2365
llvm:skip:f32.wast:2366
llvm:skip:f32.wast:2367
llvm:skip:f32.wast:2368
llvm:skip:f32.wast:2369
llvm:skip:f32.wast:2370
llvm:skip:f32.wast:2371
llvm:skip:f32.wast:2372
llvm:skip:f32.wast:2373
llvm:skip:f32.wast:2374
llvm:skip:f32.wast:2375
llvm:skip:f32.wast:2376
llvm:skip:f32.wast:2377
llvm:skip:f32.wast:2378
llvm:skip:f32.wast:2379
llvm:skip:f32.wast:2380
llvm:skip:f32.wast:2381
llvm:skip:f32.wast:2382
llvm:skip:f32.wast:2383
llvm:skip:f32.wast:2384
llvm:skip:f32.wast:2385
llvm:skip:f32.wast:2386
llvm:skip:f32.wast:2387
llvm:skip:f32.wast:2388
llvm:skip:f32.wast:2389
llvm:skip:f32.wast:2390
llvm:skip:f32.wast:2391
llvm:skip:f32.wast:2392
llvm:skip:f32.wast:2393
llvm:skip:f32.wast:2394
llvm:skip:f32.wast:2395
llvm:skip:f32.wast:2396
llvm:skip:f32.wast:2397
llvm:skip:f32.wast:2398
llvm:skip:f32.wast:2399
llvm:skip:f32.wast:2400
llvm:skip:f32.wast:2401
llvm:skip:f32.wast:2402
llvm:skip:f32.wast:2403
llvm:skip:f32.wast:2404
llvm:skip:f32.wast:2405
llvm:skip:f32.wast:2406
llvm:skip:f32.wast:2409
llvm:skip:f32.wast:2410
llvm:skip:f32.wast:2413
llvm:skip:f32.wast:2414
llvm:skip:f32.wast:2417
llvm:skip:f32.wast:2418
llvm:skip:f64.wast:1651
llvm:skip:f64.wast:1652
llvm:skip:f64.wast:1653
llvm:skip:f64.wast:1654
llvm:skip:f64.wast:1655
llvm:skip:f64.wast:1656
llvm:skip:f64.wast:1657
llvm:skip:f64.wast:1658
llvm:skip:f64.wast:1691
llvm:skip:f64.wast:1692
llvm:skip:f64.wast:1693
llvm:skip:f64.wast:1694
llvm:skip:f64.wast:1695
llvm:skip:f64.wast:1696
llvm:skip:f64.wast:1697
llvm:skip:f64.wast:1698
llvm:skip:f64.wast:1731
llvm:skip:f64.wast:1732
llvm:skip:f64.wast:1733
llvm:skip:f64.wast:1734
llvm:skip:f64.wast:1735
llvm:skip:f64.wast:1736
llvm:skip:f64.wast:1737
llvm:skip:f64.wast:1738
llvm:skip:f64.wast:1771
llvm:skip:f64.wast:1772
llvm:skip:f64.wast:1773
llvm:skip:f64.wast:1774
llvm:skip:f64.wast:1775
llvm:skip:f64.wast:1776
llvm:skip:f64.wast:1777
llvm:skip:f64.wast:1778
llvm:skip:f64.wast:1811
llvm:skip:f64.wast:1812
llvm:skip:f64.wast:1813
llvm:skip:f64.wast:1814
llvm:skip:f64.wast:1815
llvm:skip:f64.wast:1816
llvm:skip:f64.wast:1817
llvm:skip:f64.wast:1818
llvm:skip:f64.wast:1851
llvm:skip:f64.wast:1852
llvm:skip:f64.wast:1853
llvm:skip:f64.wast:1854
llvm:skip:f64.wast:1855
llvm:skip:f64.wast:1856
llvm:skip:f64.wast:1857
llvm:skip:f64.wast:1858
llvm:skip:f64.wast:1891
llvm:skip:f64.wast:1892
llvm:skip:f64.wast:1893
llvm:skip:f64.wast:1894
llvm:skip:f64.wast:1895
llvm:skip:f64.wast:1896
llvm:skip:f64.wast:1897
llvm:skip:f64.wast:1898
llvm:skip:f64.wast:1931
llvm:skip:f64.wast:1932
llvm:skip:f64.wast:1933
llvm:skip:f64.wast:1934
llvm:skip:f64.wast:1935
llvm:skip:f64.wast:1936
llvm:skip:f64.wast:1937
llvm:skip:f64.wast:1938
llvm:skip:f64.wast:1939
llvm:skip:f64.wast:1940
llvm:skip:f64.wast:1941
llvm:skip:f64.wast:1942
llvm:skip:f64.wast:1943
llvm:skip:f64.wast:1944
llvm:skip:f64.wast:1945
llvm:skip:f64.wast:1946
llvm:skip:f64.wast:1947
llvm:skip:f64.wast:1948
llvm:skip:f64.wast:1949
llvm:skip:f64.wast:1950
llvm:skip:f64.wast:1951
llvm:skip:f64.wast:1952
llvm:skip:f64.wast:1953
llvm:skip:f64.wast:1954
llvm:skip:f64.wast:1955
llvm:skip:f64.wast:1956
llvm:skip:f64.wast:1957
llvm:skip:f64.wast:1958
llvm:skip:f64.wast:1959
llvm:skip:f64.wast:1960
llvm:skip:f64.wast:1961
llvm:skip:f64.wast:1962
llvm:skip:f64.wast:1963
llvm:skip:f64.wast:1964
llvm:skip:f64.wast:1965
llvm:skip:f64.wast:1966
llvm:skip:f64.wast:1967
llvm:skip:f64.wast:1968
llvm:skip:f64.wast:1969
llvm:skip:f64.wast:1970
llvm:skip:f64.wast:1971
llvm:skip:f64.wast:1972
llvm:skip:f64.wast:1973
llvm:skip:f64.wast:1974
llvm:skip:f64.wast:1975
llvm:skip:f64.wast:1976
llvm:skip:f64.wast:1977
llvm:skip:f64.wast:1978
llvm:skip:f64.wast:1979
llvm:skip:f64.wast:1980
llvm:skip:f64.wast:1981
llvm:skip:f64.wast:1982
llvm:skip:f64.wast:1983
llvm:skip:f64.wast:1984
llvm:skip:f64.wast:1985
llvm:skip:f64.wast:1986
llvm:skip:f64.wast:1987
llvm:skip:f64.wast:1988
llvm:skip:f64.wast:1989
llvm:skip:f64.wast:1990
llvm:skip:f64.wast:1991
llvm:skip:f64.wast:1992
llvm:skip:f64.wast:1993
llvm:skip:f64.wast:1994
llvm:skip:f64.wast:1995
llvm:skip:f64.wast:1996
llvm:skip:f64.wast:1997
llvm:skip:f64.wast:1998
llvm:skip:f64.wast:1999
llvm:skip:f64.wast:2000
llvm:skip:f64.wast:2001
llvm:skip:f64.wast:2002
llvm:skip:f64.wast:2005
llvm:skip:f64.wast:2006
llvm:skip:f64.wast:2009
llvm:skip:f64.wast:2010
llvm:skip:f64.wast:2013
llvm:skip:f64.wast:2014
llvm:skip:f64.wast:2017
llvm:skip:f64.wast:2018
llvm:skip:f64.wast:2051
llvm:skip:f64.wast:2052
llvm:skip:f64.wast:2053
llvm:skip:f64.wast:2054
llvm:skip:f64.wast:2055
llvm:skip:f64.wast:2056
llvm:skip:f64.wast:2057
llvm:skip:f64.wast:2058
llvm:skip:f64.wast:2091
llvm:skip:f64.wast:2092
llvm:skip:f64.wast:2093
llvm:skip:f64.wast:2094
llvm:skip:f64.wast:2095
llvm:skip:f64.wast:2096
llvm:skip:f64.wast:2097
llvm:skip:f64.wast:2098
llvm:skip:f64.wast:2131
llvm:skip:f64.wast:2132
llvm:skip:f64.wast:2133
llvm:skip:f64.wast:2134
llvm:skip:f64.wast:2135
llvm:skip:f64.wast:2136
llvm:skip:f64.wast:2137
llvm:skip:f64.wast:2138
llvm:skip:f64.wast:2171
llvm:skip:f64.wast:2172
llvm:skip:f64.wast:2173
llvm:skip:f64.wast:2174
llvm:skip:f64.wast:2175
llvm:skip:f64.wast:2176
llvm:skip:f64.wast:2177
llvm:skip:f64.wast:2178
llvm:skip:f64.wast:2211
llvm:skip:f64.wast:2212
llvm:skip:f64.wast:2213
llvm:skip:f64.wast:2214
llvm:skip:f64.wast:2215
llvm:skip:f64.wast:2216
llvm:skip:f64.wast:2217
llvm:skip:f64.wast:2218
llvm:skip:f64.wast:2251
llvm:skip:f64.wast:2252
llvm:skip:f64.wast:2253
llvm:skip:f64.wast:2254
llvm:skip:f64.wast:2255
llvm:skip:f64.wast:2256
llvm:skip:f64.wast:2257
llvm:skip:f64.wast:2258
llvm:skip:f64.wast:2291
llvm:skip:f64.wast:2292
llvm:skip:f64.wast:2293
llvm:skip:f64.wast:2294
llvm:skip:f64.wast:2295
llvm:skip:f64.wast:2296
llvm:skip:f64.wast:2297
llvm:skip:f64.wast:2298
llvm:skip:f64.wast:2331
llvm:skip:f64.wast:2332
llvm:skip:f64.wast:2333
llvm:skip:f64.wast:2334
llvm:skip:f64.wast:2335
llvm:skip:f64.wast:2336
llvm:skip:f64.wast:2337
llvm:skip:f64.wast:2338
llvm:skip:f64.wast:2339
llvm:skip:f64.wast:2340
llvm:skip:f64.wast:2341
llvm:skip:f64.wast:2342
llvm:skip:f64.wast:2343
llvm:skip:f64.wast:2344
llvm:skip:f64.wast:2345
llvm:skip:f64.wast:2346
llvm:skip:f64.wast:2347
llvm:skip:f64.wast:2348
llvm:skip:f64.wast:2349
llvm:skip:f64.wast:2350
llvm:skip:f64.wast:2351
llvm:skip:f64.wast:2352
llvm:skip:f64.wast:2353
llvm:skip:f64.wast:2354
llvm:skip:f64.wast:2355
llvm:skip:f64.wast:2356
llvm:skip:f64.wast:2357
llvm:skip:f64.wast:2358
llvm:skip:f64.wast:2359
llvm:skip:f64.wast:2360
llvm:skip:f64.wast:2361
llvm:skip:f64.wast:2362
llvm:skip:f64.wast:2363
llvm:skip:f64.wast:2364
llvm:skip:f64.wast:2365
llvm:skip:f64.wast:2366
llvm:skip:f64.wast:2367
llvm:skip:f64.wast:2368
llvm:skip:f64.wast:2369
llvm:skip:f64.wast:2370
llvm:skip:f64.wast:2371
llvm:skip:f64.wast:2372
llvm:skip:f64.wast:2373
llvm:skip:f64.wast:2374
llvm:skip:f64.wast:2375
llvm:skip:f64.wast:2376
llvm:skip:f64.wast:2377
llvm:skip:f64.wast:2378
llvm:skip:f64.wast:2379
llvm:skip:f64.wast:2380
llvm:skip:f64.wast:2381
llvm:skip:f64.wast:2382
llvm:skip:f64.wast:2383
llvm:skip:f64.wast:2384
llvm:skip:f64.wast:2385
llvm:skip:f64.wast:2386
llvm:skip:f64.wast:2387
llvm:skip:f64.wast:2388
llvm:skip:f64.wast:2389
llvm:skip:f64.wast:2390
llvm:skip:f64.wast:2391
llvm:skip:f64.wast:2392
llvm:skip:f64.wast:2393
llvm:skip:f64.wast:2394
llvm:skip:f64.wast:2395
llvm:skip:f64.wast:2396
llvm:skip:f64.wast:2397
llvm:skip:f64.wast:2398
llvm:skip:f64.wast:2399
llvm:skip:f64.wast:2400
llvm:skip:f64.wast:2401
llvm:skip:f64.wast:2402
llvm:skip:f64.wast:2405
llvm:skip:f64.wast:2406
llvm:skip:f64.wast:2409
llvm:skip:f64.wast:2410
llvm:skip:f64.wast:2413
llvm:skip:f64.wast:2414
llvm:skip:f64.wast:2417
llvm:skip:f64.wast:2418
# LLVM
llvm:skip:br_table.wast:1255
llvm:skip:elem.wast:229 # Spec running forever
@ -37,4 +585,4 @@ llvm:skip:skip-stack-guard-page.wast:* # Spec running forever or (signal: 4, SIG
singlepass:skip:elem.wast:229 # Spec running forever
singlepass:skip:names.wast:* # Names file has parsing error?
singlepass:skip:simd.wast:* # SIMD not implemented
singlepass:skip:simd_binaryen.wast:* # SIMD not implemented
singlepass:skip:simd_binaryen.wast:* # SIMD not implemented

View File

@ -10,7 +10,6 @@
#[cfg(test)]
mod tests {
// TODO fix NaN checking
// TODO fix spec failures
// TODO fix panics and remove panic handlers
// TODO do something with messages _message, message: _, msg: _
@ -272,7 +271,9 @@ mod tests {
for (i, v) in values.iter().enumerate() {
let expected_value =
convert_value(*expected.get(i).unwrap());
if *v != expected_value {
if *v != expected_value
&& !(*v != *v && expected_value != expected_value)
{
test_report.add_failure(SpecFailure {
file: filename.to_string(),
line,
@ -1147,31 +1148,28 @@ mod tests {
impl NaNCheck for f32 {
/// The MSB of the mantissa must be set for a NaN to be a quiet NaN.
fn is_quiet_nan(&self) -> bool {
let bit_mask = 0b1 << 22; // Used to check if 23rd bit is set, which is MSB of the mantissa
self.is_nan() && (self.to_bits() & bit_mask) == bit_mask
let mantissa_msb = 0b1 << 22;
self.is_nan() && (self.to_bits() & mantissa_msb) != 0
}
/// For a NaN to be canonical, its mantissa bits must all be unset
/// For a NaN to be canonical, the MSB of the mantissa must be set and
/// all other mantissa bits must be unset.
fn is_canonical_nan(&self) -> bool {
let bit_mask: u32 = 0b1____0000_0000____011_1111_1111_1111_1111_1111;
let masked_value = self.to_bits() ^ bit_mask;
masked_value == 0xFFFF_FFFF || masked_value == 0x7FFF_FFFF
return self.to_bits() == 0xFFC0_0000 || self.to_bits() == 0x7FC0_0000;
}
}
impl NaNCheck for f64 {
/// The MSB of the mantissa must be set for a NaN to be a quiet NaN.
fn is_quiet_nan(&self) -> bool {
let bit_mask = 0b1 << 51; // Used to check if 52st bit is set, which is MSB of the mantissa
self.is_nan() && (self.to_bits() & bit_mask) == bit_mask
let mantissa_msb = 0b1 << 51;
self.is_nan() && (self.to_bits() & mantissa_msb) != 0
}
/// For a NaN to be canonical, its mantissa bits must all be unset
/// For a NaN to be canonical, the MSB of the mantissa must be set and
/// all other mantissa bits must be unset.
fn is_canonical_nan(&self) -> bool {
let bit_mask: u64 =
0b1____000_0000_0000____0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111;
let masked_value = self.to_bits() ^ bit_mask;
masked_value == 0x7FFF_FFFF_FFFF_FFFF || masked_value == 0xFFF_FFFF_FFFF_FFFF
self.to_bits() == 0x7FF8_0000_0000_0000 || self.to_bits() == 0xFFF8_0000_0000_0000
}
}