112771Sqtt2@cornell.edu# See LICENSE for license details.
212771Sqtt2@cornell.edu
312771Sqtt2@cornell.edu#*****************************************************************************
412771Sqtt2@cornell.edu# recoding.S
512771Sqtt2@cornell.edu#-----------------------------------------------------------------------------
612771Sqtt2@cornell.edu#
712771Sqtt2@cornell.edu# Test corner cases of John Hauser's microarchitectural recoding scheme.
812771Sqtt2@cornell.edu# There are twice as many recoded values as IEEE-754 values; some of these
912771Sqtt2@cornell.edu# extras are redundant (e.g. Inf) and others are illegal (subnormals with
1012771Sqtt2@cornell.edu# too many bits set).
1112771Sqtt2@cornell.edu#
1212771Sqtt2@cornell.edu
1312771Sqtt2@cornell.edu#include "riscv_test.h"
1412771Sqtt2@cornell.edu#include "test_macros.h"
1512771Sqtt2@cornell.edu
1612771Sqtt2@cornell.eduRVTEST_RV64UF
1712771Sqtt2@cornell.eduRVTEST_CODE_BEGIN
1812771Sqtt2@cornell.edu
1912771Sqtt2@cornell.edu  # Make sure infinities with different mantissas compare as equal.
2012771Sqtt2@cornell.edu  fld f0, minf, a0
2112771Sqtt2@cornell.edu  fld f1, three, a0
2212771Sqtt2@cornell.edu  fmul.d f1, f1, f0
2312771Sqtt2@cornell.edu  TEST_CASE( 2, a0, 1, feq.d a0, f0, f1)
2412771Sqtt2@cornell.edu  TEST_CASE( 3, a0, 1, fle.d a0, f0, f1)
2512771Sqtt2@cornell.edu  TEST_CASE( 4, a0, 0, flt.d a0, f0, f1)
2612771Sqtt2@cornell.edu
2712771Sqtt2@cornell.edu  # Likewise, but for zeroes.
2812771Sqtt2@cornell.edu  fcvt.d.w f0, x0
2912771Sqtt2@cornell.edu  li a0, 1
3012771Sqtt2@cornell.edu  fcvt.d.w f1, a0
3112771Sqtt2@cornell.edu  fmul.d f1, f1, f0
3212771Sqtt2@cornell.edu  TEST_CASE(5, a0, 1, feq.d a0, f0, f1)
3312771Sqtt2@cornell.edu  TEST_CASE(6, a0, 1, fle.d a0, f0, f1)
3412771Sqtt2@cornell.edu  TEST_CASE(7, a0, 0, flt.d a0, f0, f1)
3512771Sqtt2@cornell.edu
3612771Sqtt2@cornell.edu  # When converting small doubles to single-precision subnormals,
3712771Sqtt2@cornell.edu  # ensure that the extra precision is discarded.
3812771Sqtt2@cornell.edu  flw f0, big, a0
3912771Sqtt2@cornell.edu  fld f1, tiny, a0
4012771Sqtt2@cornell.edu  fcvt.s.d f1, f1
4112771Sqtt2@cornell.edu  fmul.s f0, f0, f1
4212771Sqtt2@cornell.edu  fmv.x.s a0, f0
4312771Sqtt2@cornell.edu  lw a1, small
4412771Sqtt2@cornell.edu  TEST_CASE(10, a0, 0, sub a0, a0, a1)
4512771Sqtt2@cornell.edu
4612771Sqtt2@cornell.edu  # Make sure FSD+FLD correctly saves and restores a single-precision value.
4712771Sqtt2@cornell.edu  flw f0, three, a0
4812771Sqtt2@cornell.edu  fadd.s f1, f0, f0
4912771Sqtt2@cornell.edu  fadd.s f0, f0, f0
5012771Sqtt2@cornell.edu  fsd f0, tiny, a0
5112771Sqtt2@cornell.edu  fld f0, tiny, a0
5212771Sqtt2@cornell.edu  TEST_CASE(20, a0, 1, feq.s a0, f0, f1)
5312771Sqtt2@cornell.edu
5412771Sqtt2@cornell.edu  TEST_PASSFAIL
5512771Sqtt2@cornell.edu
5612771Sqtt2@cornell.eduRVTEST_CODE_END
5712771Sqtt2@cornell.edu
5812771Sqtt2@cornell.edu  .data
5912771Sqtt2@cornell.eduRVTEST_DATA_BEGIN
6012771Sqtt2@cornell.edu
6112771Sqtt2@cornell.eduminf: .double -Inf
6212771Sqtt2@cornell.eduthree: .double 3.0
6312771Sqtt2@cornell.edubig: .float 1221
6412771Sqtt2@cornell.edusmall: .float 2.9133121e-37
6512771Sqtt2@cornell.edutiny: .double 2.3860049081905093e-40
6612771Sqtt2@cornell.edu
6712771Sqtt2@cornell.eduRVTEST_DATA_END
68