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